On Mon, Aug 30, 2010 at 02:30:20PM +0400, Alexey Gladkov wrote: > 30.08.2010 14:21, Dmitry V. Levin wrote: > > В коде is_selinux_enabled() нет проверки на невозможность прочитать. > > 38 /* Drop back to detecting it the long way. */ > 39 fp = fopen("/proc/filesystems", "r"); > 40 if (!fp) > 41 return -1; > > Здесь мы возвращаем -1. Зачем тут -1, почему не goto out; ? Потому что out: выполняет fclose(fp) и возвращает 0/1. > 44 while ((num = getline(&buf, &len, fp)) != -1) { > 45 if (strstr(buf, "selinuxfs")) { > 46 enabled = 1; > 47 break; > 48 } > 49 } > 50 > 51 if (num < 0) > 52 goto out; > > Дим, проверка есть и в этом случае вернётся 0. Люди, которые писали этот код, закрыли глаза на то, что, теоретически возможна ситуация, когда getline(3) возвращает ошибку не из-за EOF. Это проверка не на ошибку, а на EOF. Если в этой точке num < 0, это значит, что в файле /proc/filesystems нет selinuxfs. -- ldv