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