|
From: Oliver J. <oli...@mo...> - 2004-01-16 06:24:32
|
attached the rtc leakage fix for 2.6 (as included for 2.4.24)....
taken from the mm patchset, hope will included next for 2.6.2...
please include...
From: Russell King, Tom Rini, Dave Jones
As plugged in 2.4 recently.
Fix some leakage of uninitialised memory to userspace via rtc reads.
25-akpm/arch/cris/arch-v10/drivers/ds1302.c | 1 +
25-akpm/arch/cris/arch-v10/drivers/pcf8563.c | 1 +
25-akpm/arch/m68k/bvme6000/rtc.c | 1 +
25-akpm/arch/m68k/mvme16x/rtc.c | 1 +
25-akpm/arch/ppc64/kernel/rtc.c | 1 +
25-akpm/drivers/acorn/char/i2c.c | 1 +
25-akpm/drivers/char/efirtc.c | 1 +
25-akpm/drivers/char/rtc.c | 3 ++-
25-akpm/drivers/sbus/char/rtc.c | 1 +
9 files changed, 10 insertions(+), 1 deletion(-)
diff -puN arch/cris/arch-v10/drivers/ds1302.c~rtc-leak-fixes
arch/cris/arch-v10/drivers/ds1302.c
--- 25/arch/cris/arch-v10/drivers/ds1302.c~rtc-leak-fixes Tue Jan 6
12:26:34 2004
+++ 25-akpm/arch/cris/arch-v10/drivers/ds1302.c Tue Jan 6 12:26:34 2004
@@ -342,6 +342,7 @@ rtc_ioctl(struct inode *inode, struct fi
{
struct rtc_time rtc_tm;
+ memset(&rtc_tm, 0, sizeof (struct rtc_time));
get_rtc_time(&rtc_tm);
if (copy_to_user((struct rtc_time*)arg, &rtc_tm, sizeof(struct
rtc_time)))
return -EFAULT;
diff -puN arch/cris/arch-v10/drivers/pcf8563.c~rtc-leak-fixes
arch/cris/arch-v10/drivers/pcf8563.c
--- 25/arch/cris/arch-v10/drivers/pcf8563.c~rtc-leak-fixes Tue Jan 6
12:26:34 2004
+++ 25-akpm/arch/cris/arch-v10/drivers/pcf8563.c Tue Jan 6 12:26:34
2004
@@ -219,6 +219,7 @@ pcf8563_ioctl(struct inode *inode, struc
unsigned long flags;
struct rtc_time tm;
+ memset(&tm, 0, sizeof (struct rtc_time));
if (!capable(CAP_SYS_TIME))
return -EPERM;
diff -puN arch/m68k/bvme6000/rtc.c~rtc-leak-fixes
arch/m68k/bvme6000/rtc.c
--- 25/arch/m68k/bvme6000/rtc.c~rtc-leak-fixes Tue Jan 6 12:26:34 2004
+++ 25-akpm/arch/m68k/bvme6000/rtc.c Tue Jan 6 12:26:34 2004
@@ -53,6 +53,7 @@ static int rtc_ioctl(struct inode *inode
/* Ensure clock and real-time-mode-register are accessible */
msr = rtc->msr & 0xc0;
rtc->msr = 0x40;
+ memset(&wtime, 0, sizeof(struct rtc_time));
do {
wtime.tm_sec = BCD2BIN(rtc->bcd_sec);
wtime.tm_min = BCD2BIN(rtc->bcd_min);
diff -puN arch/m68k/mvme16x/rtc.c~rtc-leak-fixes arch/m68k/mvme16x/rtc.c
--- 25/arch/m68k/mvme16x/rtc.c~rtc-leak-fixes Tue Jan 6 12:26:34 2004
+++ 25-akpm/arch/m68k/mvme16x/rtc.c Tue Jan 6 12:26:34 2004
@@ -51,6 +51,7 @@ static int rtc_ioctl(struct inode *inode
local_irq_save(flags);
/* Ensure clock and real-time-mode-register are accessible */
rtc->ctrl = RTC_READ;
+ memset(&wtime, 0, sizeof(struct rtc_time));
wtime.tm_sec = BCD2BIN(rtc->bcd_sec);
wtime.tm_min = BCD2BIN(rtc->bcd_min);
wtime.tm_hour = BCD2BIN(rtc->bcd_hr);
diff -puN arch/ppc64/kernel/rtc.c~rtc-leak-fixes arch/ppc64/kernel/rtc.c
--- 25/arch/ppc64/kernel/rtc.c~rtc-leak-fixes Tue Jan 6 12:26:34 2004
+++ 25-akpm/arch/ppc64/kernel/rtc.c Tue Jan 6 12:26:34 2004
@@ -99,6 +99,7 @@ static int rtc_ioctl(struct inode *inode
switch (cmd) {
case RTC_RD_TIME: /* Read the time/date from RTC */
{
+ memset(&wtime, 0, sizeof(struct rtc_time));
ppc_md.get_rtc_time(&wtime);
break;
}
diff -puN drivers/acorn/char/i2c.c~rtc-leak-fixes
drivers/acorn/char/i2c.c
--- 25/drivers/acorn/char/i2c.c~rtc-leak-fixes Tue Jan 6 12:26:34 2004
+++ 25-akpm/drivers/acorn/char/i2c.c Tue Jan 6 12:26:34 2004
@@ -167,6 +167,7 @@ static int rtc_ioctl(struct inode *inode
break;
case RTC_RD_TIME:
+ memset(&rtctm, 0, sizeof(struct rtc_time));
get_rtc_time(&rtc_raw, &year);
rtctm.tm_sec = rtc_raw.secs;
rtctm.tm_min = rtc_raw.mins;
diff -puN drivers/char/efirtc.c~rtc-leak-fixes drivers/char/efirtc.c
--- 25/drivers/char/efirtc.c~rtc-leak-fixes Tue Jan 6 12:26:34 2004
+++ 25-akpm/drivers/char/efirtc.c Tue Jan 6 12:26:34 2004
@@ -118,6 +118,7 @@ convert_to_efi_time(struct rtc_time *wti
static void
convert_from_efi_time(efi_time_t *eft, struct rtc_time *wtime)
{
+ memset(wtime, 0, sizeof(*wtime));
wtime->tm_sec = eft->second;
wtime->tm_min = eft->minute;
wtime->tm_hour = eft->hour;
diff -puN drivers/char/rtc.c~rtc-leak-fixes drivers/char/rtc.c
--- 25/drivers/char/rtc.c~rtc-leak-fixes Tue Jan 6 12:26:34 2004
+++ 25-akpm/drivers/char/rtc.c Tue Jan 6 12:26:34 2004
@@ -431,7 +431,7 @@ static int rtc_do_ioctl(unsigned int cmd
* means "don't care" or "match all". Only the tm_hour,
* tm_min, and tm_sec values are filled in.
*/
-
+ memset(&wtime, 0, sizeof(struct rtc_time));
get_rtc_alm_time(&wtime);
break;
}
@@ -481,6 +481,7 @@ static int rtc_do_ioctl(unsigned int cmd
}
case RTC_RD_TIME: /* Read the time/date from RTC */
{
+ memset(&wtime, 0, sizeof(struct rtc_time));
rtc_get_rtc_time(&wtime);
break;
}
diff -puN drivers/sbus/char/rtc.c~rtc-leak-fixes drivers/sbus/char/rtc.c
--- 25/drivers/sbus/char/rtc.c~rtc-leak-fixes Tue Jan 6 12:26:34 2004
+++ 25-akpm/drivers/sbus/char/rtc.c Tue Jan 6 12:26:34 2004
@@ -89,6 +89,7 @@ static int rtc_ioctl(struct inode *inode
switch (cmd)
{
case RTCGET:
+ memset(&rtc_tm, 0, sizeof(struct rtc_time));
get_rtc_time(&rtc_tm);
if (copy_to_user((struct rtc_time*)arg, &rtc_tm, sizeof(struct
rtc_time)))
_
|