]> pilppa.org Git - familiar-h63xx-build.git/blob - org.handhelds.familiar/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P08-rtc-mremap-mremap2nd-fix_041213.patch
OE tree imported from monotone branch org.openembedded.oz354fam083 at revision 8b12e3...
[familiar-h63xx-build.git] / org.handhelds.familiar / packages / linux / openzaurus-pxa27x-2.4.20-rmk2-embedix20050602 / P08-rtc-mremap-mremap2nd-fix_041213.patch
1 diff -Nur c3000_pre/linux/arch/cris/drivers/ds1302.c c3000_test/linux/arch/cris/drivers/ds1302.c
2 --- c3000_pre/linux/arch/cris/drivers/ds1302.c  2004-08-21 09:48:08.000000000 +0900
3 +++ c3000_test/linux/arch/cris/drivers/ds1302.c 2004-12-13 23:30:00.000000000 +0900
4 @@ -315,6 +315,7 @@
5                 {
6                         struct rtc_time rtc_tm;
7                                                 
8 +                       memset(&rtc_tm, 0, sizeof (struct rtc_time));
9                         get_rtc_time(&rtc_tm);                                          
10                         if (copy_to_user((struct rtc_time*)arg, &rtc_tm, sizeof(struct rtc_time)))
11                                 return -EFAULT; 
12 diff -Nur c3000_pre/linux/arch/m68k/bvme6000/rtc.c c3000_test/linux/arch/m68k/bvme6000/rtc.c
13 --- c3000_pre/linux/arch/m68k/bvme6000/rtc.c    2004-08-21 09:48:10.000000000 +0900
14 +++ c3000_test/linux/arch/m68k/bvme6000/rtc.c   2004-12-13 23:30:00.000000000 +0900
15 @@ -54,6 +54,7 @@
16                 /* Ensure clock and real-time-mode-register are accessible */
17                 msr = rtc->msr & 0xc0;
18                 rtc->msr = 0x40;
19 +               memset(&wtime, 0, sizeof(struct rtc_time));
20                 do {
21                         wtime.tm_sec =  BCD2BIN(rtc->bcd_sec);
22                         wtime.tm_min =  BCD2BIN(rtc->bcd_min);
23 diff -Nur c3000_pre/linux/arch/m68k/mvme16x/rtc.c c3000_test/linux/arch/m68k/mvme16x/rtc.c
24 --- c3000_pre/linux/arch/m68k/mvme16x/rtc.c     2004-08-21 09:48:11.000000000 +0900
25 +++ c3000_test/linux/arch/m68k/mvme16x/rtc.c    2004-12-13 23:30:00.000000000 +0900
26 @@ -52,6 +52,7 @@
27                 cli();
28                 /* Ensure clock and real-time-mode-register are accessible */
29                 rtc->ctrl = RTC_READ;
30 +               memset(&wtime, 0, sizeof(struct rtc_time));
31                 wtime.tm_sec =  BCD2BIN(rtc->bcd_sec);
32                 wtime.tm_min =  BCD2BIN(rtc->bcd_min);
33                 wtime.tm_hour = BCD2BIN(rtc->bcd_hr);
34 diff -Nur c3000_pre/linux/drivers/char/efirtc.c c3000_test/linux/drivers/char/efirtc.c
35 --- c3000_pre/linux/drivers/char/efirtc.c       2004-08-21 09:48:25.000000000 +0900
36 +++ c3000_test/linux/drivers/char/efirtc.c      2004-12-13 23:30:00.000000000 +0900
37 @@ -118,6 +118,7 @@
38  static void
39  convert_from_efi_time(efi_time_t *eft, struct rtc_time *wtime)
40  {
41 +       memset(wtime, 0, sizeof(struct rtc_time));
42         wtime->tm_sec  = eft->second;
43         wtime->tm_min  = eft->minute;
44         wtime->tm_hour = eft->hour;
45 diff -Nur c3000_pre/linux/drivers/char/rtc.c c3000_test/linux/drivers/char/rtc.c
46 --- c3000_pre/linux/drivers/char/rtc.c  2004-08-21 09:48:25.000000000 +0900
47 +++ c3000_test/linux/drivers/char/rtc.c 2004-12-13 23:30:00.000000000 +0900
48 @@ -375,7 +375,7 @@
49                  * means "don't care" or "match all". Only the tm_hour,
50                  * tm_min, and tm_sec values are filled in.
51                  */
52 -
53 +               memset(&wtime, 0, sizeof(struct rtc_time));
54                 get_rtc_alm_time(&wtime);
55                 break; 
56         }
57 @@ -423,6 +423,7 @@
58         }
59         case RTC_RD_TIME:       /* Read the time/date from RTC  */
60         {
61 +               memset(&wtime, 0, sizeof(struct rtc_time));
62                 get_rtc_time(&wtime);
63                 break;
64         }
65 diff -Nur c3000_pre/linux/drivers/macintosh/rtc.c c3000_test/linux/drivers/macintosh/rtc.c
66 --- c3000_pre/linux/drivers/macintosh/rtc.c     2004-08-21 09:48:35.000000000 +0900
67 +++ c3000_test/linux/drivers/macintosh/rtc.c    2004-12-13 23:30:00.000000000 +0900
68 @@ -64,6 +64,7 @@
69         case RTC_RD_TIME:
70                 if (ppc_md.get_rtc_time)
71                 {
72 +                       memset(&rtc_tm, 0, sizeof(struct rtc_time));
73                         get_rtc_time(&rtc_tm);
74  
75                         if (copy_to_user((struct rtc_time*)arg, &rtc_tm, sizeof(struct rtc_time)))
76 diff -Nur c3000_pre/linux/drivers/sbus/char/rtc.c c3000_test/linux/drivers/sbus/char/rtc.c
77 --- c3000_pre/linux/drivers/sbus/char/rtc.c     2004-08-21 09:48:39.000000000 +0900
78 +++ c3000_test/linux/drivers/sbus/char/rtc.c    2004-12-13 23:30:00.000000000 +0900
79 @@ -89,6 +89,7 @@
80         switch (cmd)
81         {
82         case RTCGET:
83 +               memset(&rtc_tm, 0, sizeof(struct rtc_time));
84                 get_rtc_time(&rtc_tm);
85  
86                 if (copy_to_user((struct rtc_time*)arg, &rtc_tm, sizeof(struct rtc_time)))
87 diff -Nur c3000_pre/linux/mm/mmap.c c3000_test/linux/mm/mmap.c
88 --- c3000_pre/linux/mm/mmap.c   2004-08-21 09:49:15.000000000 +0900
89 +++ c3000_test/linux/mm/mmap.c  2004-12-13 23:27:31.000000000 +0900
90 @@ -1045,6 +1045,9 @@
91         if (!len)
92                 return addr;
93  
94 +       if ((addr + len) > TASK_SIZE || (addr + len) < addr)
95 +               return -EINVAL;
96 +
97         /*
98          * mlock MCL_FUTURE?
99          */
100 diff -Nur c3000_pre/linux/mm/mremap.c c3000_test/linux/mm/mremap.c
101 --- c3000_pre/linux/mm/mremap.c 2004-08-21 09:49:15.000000000 +0900
102 +++ c3000_test/linux/mm/mremap.c        2004-12-13 23:30:18.000000000 +0900
103 @@ -242,6 +242,13 @@
104  
105                 if (new_len > TASK_SIZE || new_addr > TASK_SIZE - new_len)
106                         goto out;
107 +               /*
108 +                * Allow new_len == 0 only if new_addr == addr
109 +                * to preserve truncation in place (that was working
110 +                * safe and some app may depend on it).
111 +                */
112 +               if (unlikely(!new_len && new_addr != addr))
113 +                       goto out;
114  
115                 /* Check if the location we're moving into overlaps the
116                  * old location at all, and fail if it does.
117 @@ -252,16 +259,20 @@
118                 if ((addr <= new_addr) && (addr+old_len) > new_addr)
119                         goto out;
120  
121 -               do_munmap(current->mm, new_addr, new_len);
122 +               ret = do_munmap(current->mm, new_addr, new_len);
123 +               if (ret && new_len)
124 +                       goto out;
125         }
126  
127         /*
128          * Always allow a shrinking remap: that just unmaps
129          * the unnecessary pages..
130          */
131 -       ret = addr;
132         if (old_len >= new_len) {
133 -               do_munmap(current->mm, addr+new_len, old_len - new_len);
134 +               ret = do_munmap(current->mm, addr+new_len, old_len - new_len);
135 +               if (ret && old_len != new_len)
136 +                       goto out;
137 +               ret = addr;
138                 if (!(flags & MREMAP_FIXED) || (new_addr == addr))
139                         goto out;
140         }