This is the mail archive of the libc-alpha@sourceware.cygnus.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: siginfo broken in glibc



Here's a patch against kernel 2.3.39.  It fixes struct siginfo.  The
patch should have the following features:
- Full binary compatibility between older and newer kernels on ix86
  and arm - and compatibility with current glibc
- Fixes m68k - but m68k was broken in glibc anyway.

Could I have a short feedback if this works on ix86, arm and m68k?
Chris, what do you think?  I'd like to send this to Linus asap.

The other platforms shouldn't have a problem.

Andreas

diff -ur linux/arch/arm/kernel/signal.c linux-2.3.39/arch/arm/kernel/signal.c
--- linux/arch/arm/kernel/signal.c	Tue Jan 11 03:15:58 2000
+++ linux-2.3.39/arch/arm/kernel/signal.c	Wed Jan 19 11:17:53 2000
@@ -18,7 +18,6 @@
 #include <linux/stddef.h>
 #include <linux/binfmts.h>
 #include <linux/tty.h>
-#include <linux/highuid.h>
 
 #include <asm/ucontext.h>
 #include <asm/uaccess.h>
@@ -501,7 +500,6 @@
 				info.si_code = SI_USER;
 				info.si_pid = current->p_pptr->pid;
 				info.si_uid = current->p_pptr->uid;
-				info.si_uid16 = high2lowuid(current->p_pptr->uid);
 			}
 
 			/* If the (new) signal is now blocked, requeue it.  */
diff -ur linux/arch/i386/kernel/signal.c linux-2.3.39/arch/i386/kernel/signal.c
--- linux/arch/i386/kernel/signal.c	Tue Jan 11 03:15:58 2000
+++ linux-2.3.39/arch/i386/kernel/signal.c	Wed Jan 19 11:18:11 2000
@@ -19,7 +19,6 @@
 #include <linux/ptrace.h>
 #include <linux/unistd.h>
 #include <linux/stddef.h>
-#include <linux/highuid.h>
 #include <asm/ucontext.h>
 #include <asm/uaccess.h>
 
@@ -643,7 +642,6 @@
 				info.si_code = SI_USER;
 				info.si_pid = current->p_pptr->pid;
 				info.si_uid = current->p_pptr->uid;
-				info.si_uid16 = high2lowuid(current->p_pptr->uid);
 			}
 
 			/* If the (new) signal is now blocked, requeue it.  */
diff -ur linux/arch/m68k/kernel/signal.c linux-2.3.39/arch/m68k/kernel/signal.c
--- linux/arch/m68k/kernel/signal.c	Tue Jan 11 03:15:58 2000
+++ linux-2.3.39/arch/m68k/kernel/signal.c	Wed Jan 19 11:18:33 2000
@@ -37,7 +37,6 @@
 #include <linux/ptrace.h>
 #include <linux/unistd.h>
 #include <linux/stddef.h>
-#include <linux/highuid.h>
 
 #include <asm/setup.h>
 #include <asm/uaccess.h>
@@ -1049,7 +1048,6 @@
 				info.si_code = SI_USER;
 				info.si_pid = current->p_pptr->pid;
 				info.si_uid = current->p_pptr->uid;
-				info.si_uid16 = high2lowuid(current->p_pptr->uid);
 			}
 
 			/* If the (new) signal is now blocked, requeue it.  */
diff -ur linux/include/asm-arm/siginfo.h linux-2.3.39/include/asm-arm/siginfo.h
--- linux/include/asm-arm/siginfo.h	Tue Jan 11 03:15:58 2000
+++ linux-2.3.39/include/asm-arm/siginfo.h	Wed Jan 19 11:15:01 2000
@@ -24,8 +24,7 @@
 		/* kill() */
 		struct {
 			pid_t _pid;		/* sender's pid */
-			old_uid_t _uid;		/* backwards compatibility */
-			uid_t _uid32;		/* sender's uid */
+			uid_t _uid;		/* sender's uid */
 		} _kill;
 
 		/* POSIX.1b timers */
@@ -37,19 +36,17 @@
 		/* POSIX.1b signals */
 		struct {
 			pid_t _pid;		/* sender's pid */
-			old_uid_t _uid;		/* backwards compatibility */
+			uid_t _uid;		/* sender's uid */
 			sigval_t _sigval;
-			uid_t _uid32;		/* sender's uid */
 		} _rt;
 
 		/* SIGCHLD */
 		struct {
 			pid_t _pid;		/* which child */
-			old_uid_t _uid;		/* backwards compatibility */
+			uid_t _uid;		/* sender's uid */
 			int _status;		/* exit code */
 			clock_t _utime;
 			clock_t _stime;
-			uid_t _uid32;		/* sender's uid */
 		} _sigchld;
 
 		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
@@ -65,18 +62,11 @@
 	} _sifields;
 } siginfo_t;
 
-#define UID16_SIGINFO_COMPAT_NEEDED
-
 /*
  * How these fields are to be accessed.
  */
 #define si_pid		_sifields._kill._pid
-#ifdef __KERNEL__
-#define si_uid		_sifields._kill._uid32
-#define si_uid16	_sifields._kill._uid
-#else
 #define si_uid		_sifields._kill._uid
-#endif /* __KERNEL__ */
 #define si_status	_sifields._sigchld._status
 #define si_utime	_sifields._sigchld._utime
 #define si_stime	_sifields._sigchld._stime
diff -ur linux/include/asm-i386/siginfo.h linux-2.3.39/include/asm-i386/siginfo.h
--- linux/include/asm-i386/siginfo.h	Tue Jan 11 03:29:05 2000
+++ linux-2.3.39/include/asm-i386/siginfo.h	Wed Jan 19 11:13:21 2000
@@ -24,8 +24,7 @@
 		/* kill() */
 		struct {
 			pid_t _pid;		/* sender's pid */
-			old_uid_t _uid;		/* backwards compatibility */
-			uid_t _uid32;		/* sender's uid */
+			uid_t _uid;		/* sender's uid */
 		} _kill;
 
 		/* POSIX.1b timers */
@@ -37,19 +36,17 @@
 		/* POSIX.1b signals */
 		struct {
 			pid_t _pid;		/* sender's pid */
-			old_uid_t _uid;		/* backwards compatibility */
+			uid_t _uid;		/* sender's uid */
 			sigval_t _sigval;
-			uid_t _uid32;		/* sender's uid */
 		} _rt;
 
 		/* SIGCHLD */
 		struct {
 			pid_t _pid;		/* which child */
-			old_uid_t _uid;		/* backwards compatibility */
+			uid_t _uid;		/* sender's uid */
 			int _status;		/* exit code */
 			clock_t _utime;
 			clock_t _stime;
-			uid_t _uid32;		/* sender's uid */
 		} _sigchld;
 
 		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
@@ -65,18 +62,11 @@
 	} _sifields;
 } siginfo_t;
 
-#define UID16_SIGINFO_COMPAT_NEEDED
-
 /*
  * How these fields are to be accessed.
  */
 #define si_pid		_sifields._kill._pid
-#ifdef __KERNEL__
-#define si_uid		_sifields._kill._uid32
-#define si_uid16	_sifields._kill._uid
-#else
 #define si_uid		_sifields._kill._uid
-#endif /* __KERNEL__ */
 #define si_status	_sifields._sigchld._status
 #define si_utime	_sifields._sigchld._utime
 #define si_stime	_sifields._sigchld._stime
diff -ur linux/include/asm-m68k/siginfo.h linux-2.3.39/include/asm-m68k/siginfo.h
--- linux/include/asm-m68k/siginfo.h	Tue Jan 11 03:15:58 2000
+++ linux-2.3.39/include/asm-m68k/siginfo.h	Wed Jan 19 11:13:06 2000
@@ -24,8 +24,7 @@
 		/* kill() */
 		struct {
 			pid_t _pid;		/* sender's pid */
-			old_uid_t _uid;		/* backwards compatibility */
-			uid_t _uid32;		/* sender's uid */
+			uid_t _uid;		/* sender's uid */
 		} _kill;
 
 		/* POSIX.1b timers */
@@ -37,19 +36,17 @@
 		/* POSIX.1b signals */
 		struct {
 			pid_t _pid;		/* sender's pid */
-			old_uid_t _uid;		/* backwards compatibility */
+			uid_t _uid;		/* sender's uid */
 			sigval_t _sigval;
-			uid_t _uid32;		/* sender's uid */
 		} _rt;
 
 		/* SIGCHLD */
 		struct {
 			pid_t _pid;		/* which child */
-			old_uid_t _uid;		/* backwards compatibility */
+			uid_t _uid;		/* sender's uid */
 			int _status;		/* exit code */
 			clock_t _utime;
 			clock_t _stime;
-			uid_t _uid32;		/* sender's uid */
 		} _sigchld;
 
 		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
@@ -65,18 +62,11 @@
 	} _sifields;
 } siginfo_t;
 
-#define UID16_SIGINFO_COMPAT_NEEDED
-
 /*
  * How these fields are to be accessed.
  */
 #define si_pid		_sifields._kill._pid
-#ifdef __KERNEL__
-#define si_uid		_sifields._kill._uid32
-#define si_uid16	_sifields._kill._uid
-#else
 #define si_uid		_sifields._kill._uid
-#endif /* __KERNEL__ */
 #define si_status	_sifields._sigchld._status
 #define si_utime	_sifields._sigchld._utime
 #define si_stime	_sifields._sigchld._stime
diff -ur linux/kernel/signal.c linux-2.3.39/kernel/signal.c
--- linux/kernel/signal.c	Tue Jan 11 03:15:58 2000
+++ linux-2.3.39/kernel/signal.c	Wed Jan 19 11:20:02 2000
@@ -12,7 +12,6 @@
 #include <linux/smp_lock.h>
 #include <linux/init.h>
 #include <linux/sched.h>
-#include <linux/highuid.h>
 
 #include <asm/uaccess.h>
 
@@ -144,7 +143,6 @@
 			info->si_code = 0;
 			info->si_pid = 0;
 			info->si_uid = 0;
-			SET_UID16(info->si_uid16, 0);
 		} else {
 			struct signal_queue *q, **pp;
 			pp = &current->sigqueue;
@@ -180,7 +178,6 @@
 				info->si_code = 0;
 				info->si_pid = 0;
 				info->si_uid = 0;
-				SET_UID16(info->si_uid16, 0);
 			}
 		}
 
@@ -343,7 +340,6 @@
 				q->info.si_code = SI_USER;
 				q->info.si_pid = current->pid;
 				q->info.si_uid = current->uid;
-				SET_UID16(q->info.si_uid16, current->uid);
 				break;
 			case 1:
 				q->info.si_signo = sig;
@@ -351,7 +347,6 @@
 				q->info.si_code = SI_KERNEL;
 				q->info.si_pid = 0;
 				q->info.si_uid = 0;
-				SET_UID16(q->info.si_uid16, 0);
 				break;
 			default:
 				q->info = *info;
@@ -801,7 +796,6 @@
 	info.si_code = SI_USER;
 	info.si_pid = current->pid;
 	info.si_uid = current->uid;
-	SET_UID16(info.si_uid16, current->uid);
 
 	return kill_something_info(sig, &info, pid);
 }


-- 
 Andreas Jaeger
  SuSE Labs aj@suse.de
   private aj@arthur.rhein-neckar.de

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]