[Powertop] Device list sort function bug
Igor Zhbanov <i.zhbanov at samsung.com> Wed, 11 Jul 2012 10:11:16 +0400
| Newsgroups | dev.linux.lists.powertop |
|---|---|
| Message-ID | <[email protected]> |
Hello! 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. Here is the patch: --8<--Cut-here---------------------------------------------------------------- diff -purN powertop-il/src/devlist.cpp powertop-il-fix/src/devlist.cpp --- powertop-il/src/devlist.cpp 2012-07-03 17:00:50.000000000 +0400 +++ powertop-il-fix/src/devlist.cpp 2012-07-03 20:01:05.896232845 +0400 @@ -273,7 +273,7 @@ static bool devlist_sort(struct devuser 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) --8<-------------------------------------------------------------------------- Thank you. -- 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
03-powertop-fix01.diff
(text/x-diff, 453 B)
diff -purN powertop-il/src/devlist.cpp powertop-il-fix/src/devlist.cpp --- powertop-il/src/devlist.cpp 2012-07-03 17:00:50.000000000 +0400 +++ powertop-il-fix/src/devlist.cpp 2012-07-03 20:01:05.896232845 +0400 @@ -273,7 +273,7 @@ static bool devlist_sort(struct devuser 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)