Re: [Powertop] Device list sort function bug
Igor Zhbanov <i.zhbanov at samsung.com> Wed, 11 Jul 2012 12:16:33 +0400
| Newsgroups | dev.linux.lists.powertop |
|---|---|
| Message-ID | <[email protected]> |
So here is the formatted version: From 5d284137a6035bab65717fbacd98423b96d862cf Mon Sep 17 00:00:00 2001 From: Igor Zhbanov<i.zhbanov(a)samsung.com> Date: Wed, 11 Jul 2012 12:08:21 +0400 Subject: [PATCH] Device list sort function bug Sometimes PowerTOP dies with a Segmentation Fault while generating the report. Little investigation shown that it dies while sorting the device list. The problem is that comparison function devlist_sort is incorrect. The function should return true if first argument "preceeds" second. But when strcmp() is used, it can return -1, 0 and 1. So both -1 and 1 values are silently converted to true, which is wrong. It confuses the sort() function and it crosses boundary of array. --- src/devlist.cpp | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/devlist.cpp b/src/devlist.cpp index 93f2081..cd5b5d8 100644 --- a/src/devlist.cpp +++ b/src/devlist.cpp @@ -273,7 +273,7 @@ static bool devlist_sort(struct devuser * i, struct devuser * j) if (i->pid != j->pid) return i->pid< j->pid; - return strcmp(i->device, j->device); + return (strcmp(i->device, j->device)< 0); } static const char *dev_class(int line) -- 1.7.5.4 Jan-Simon Möller wrote: > Yes, in an hour or so. > Best, > JS > Am Mittwoch, 11. Juli 2012, 09:33:42 schrieb Sergey Senozhatsky: >> On (07/11/12 10:11), Igor Zhbanov wrote: >>> Sometimes PowerTOP dies with a Segmentation Fault while generating >>> the report. Little investigation shown that it dies while sorting >>> the device list. The problem is that comparison function devlist_sort >>> is incorrect. >>> >>> The function should return true if first argument "preceeds" second. >>> But when strcmp() is used, it can return -1, 0 and 1. So both -1 and 1 >>> values are silently converted to true, which is wrong. It confuses the >>> sort() function and it crosses boundary of array. >> Jan, could you please test this one? >> >> Thanks in advance, >> >> -ss -- Best regards, Igor Zhbanov, Expert Software Engineer, phone: +7 (495) 797 25 00 ext 3806 e-mail: i.zhbanov(a)samsung.com ASWG, Moscow R&D center, Samsung Electronics 12 Dvintsev street, building 1 127018, Moscow, Russian Federation