Oops w 2.4.x+grsec

Jakub Bogusz qboosh w pld-linux.org
Wto, 16 Gru 2003, 11:48:36 CET


On Tue, Dec 16, 2003 at 11:33:50AM +0100, qboosh wrote:
> Module name:	SOURCES
> Changes by:	qboosh	03/12/16 11:33:48
> 
> Added files:
> 	linux-2.4-sysctl-empty.patch
> 
> Log message:
> Don't register empty sysctl dirs in /proc/sys.
> They would be removed after registering some other sysctl(s) in the
> same directory (e.g. rtc in /proc/sys/dev) and unregistering all of
> them (then initially empty e.g. /proc/sys/dev disappears).
> After disappearing of directory topdir ->de (for "dev") points to
> structure which has been freed.
> It's harmless in vanilla 2.4, but with grsecurity causes an Oops
> on numeric sysctls referring to removed directory (even with all
> grsecurity features disabled, only patch applied).
> The same issue seems to exist in 2.6, and _probably_ can cause similar
> problems in selinux.

Taka niespodzianka mnie spotkała wczoraj przy próbie użycia "sensors"
bez wczytanych modułów.
Wiem już, że problem dotyczy także 2.4.20-9 (czyli 2.4.20-11 też).
Poprawione w CVS na LINUX_2_4.

Czy moglibyście sprawdzić, czy problem dotyczy także 2.4.23+grsec?
I 2.6 z włączonym selinux?
(sprawdziłem (via /dev/kmem), że 2.6 zachowuje się tak samo, ale
z możliwym oopsem to już tylko przypuszczenia po przejrzeniu kodu)

Test polega na doprowadzeniu do usunięcia /proc/sys/dev (rmmod rtc,
cdrom, i może paru innych rzeczy) i wywołaniu numerycznego sysctl-a
dotyczącego tego katalogu. Robi to polecenie "sensors", albo poniższy
programik:

#v+
#include <linux/sysctl.h>
#include <linux/types.h>
#include <linux/unistd.h>

_syscall1(int, _sysctl, struct __sysctl_args *, args);
int main()
{
        int sname[]={7,1,3};
        struct __sysctl_args s={sname, 3, 0, 0, 0, 0};
        _sysctl(&s);
        return 0;
}
#v-

Oczywiście lepiej nie robić tego na produkcyjnych maszynach ;)


-- 
Jakub Bogusz    http://cyber.cs.net.pl/~qboosh/



Więcej informacji o liście dyskusyjnej pld-kernel