Annotation of /trunk/kernel-lts/patches-3.4/0166-3.4.67-all-fixes.patch
Parent Directory | Revision Log
Revision 2321 -
(hide annotations)
(download)
Mon Nov 18 12:00:05 2013 UTC (10 years, 10 months ago) by niro
File size: 10889 byte(s)
Mon Nov 18 12:00:05 2013 UTC (10 years, 10 months ago) by niro
File size: 10889 byte(s)
-linux-3.4.67
1 | niro | 2321 | diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c |
2 | index 45ba99f..71d7d72 100644 | ||
3 | --- a/arch/parisc/kernel/traps.c | ||
4 | +++ b/arch/parisc/kernel/traps.c | ||
5 | @@ -810,14 +810,14 @@ void notrace handle_interruption(int code, struct pt_regs *regs) | ||
6 | else { | ||
7 | |||
8 | /* | ||
9 | - * The kernel should never fault on its own address space. | ||
10 | + * The kernel should never fault on its own address space, | ||
11 | + * unless pagefault_disable() was called before. | ||
12 | */ | ||
13 | |||
14 | - if (fault_space == 0) | ||
15 | + if (fault_space == 0 && !in_atomic()) | ||
16 | { | ||
17 | pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC); | ||
18 | parisc_terminate("Kernel Fault", regs, code, fault_address); | ||
19 | - | ||
20 | } | ||
21 | } | ||
22 | |||
23 | diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | ||
24 | index 24b23a4..126f38d 100644 | ||
25 | --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S | ||
26 | +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | ||
27 | @@ -935,7 +935,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) | ||
28 | BEGIN_FTR_SECTION | ||
29 | mfspr r8, SPRN_DSCR | ||
30 | ld r7, HSTATE_DSCR(r13) | ||
31 | - std r8, VCPU_DSCR(r7) | ||
32 | + std r8, VCPU_DSCR(r9) | ||
33 | mtspr SPRN_DSCR, r7 | ||
34 | END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) | ||
35 | |||
36 | diff --git a/drivers/char/random.c b/drivers/char/random.c | ||
37 | index d98b2a6..817eeb6 100644 | ||
38 | --- a/drivers/char/random.c | ||
39 | +++ b/drivers/char/random.c | ||
40 | @@ -1435,12 +1435,11 @@ ctl_table random_table[] = { | ||
41 | |||
42 | static u32 random_int_secret[MD5_MESSAGE_BYTES / 4] ____cacheline_aligned; | ||
43 | |||
44 | -static int __init random_int_secret_init(void) | ||
45 | +int random_int_secret_init(void) | ||
46 | { | ||
47 | get_random_bytes(random_int_secret, sizeof(random_int_secret)); | ||
48 | return 0; | ||
49 | } | ||
50 | -late_initcall(random_int_secret_init); | ||
51 | |||
52 | /* | ||
53 | * Get a random word for internal kernel use only. Similar to urandom but | ||
54 | diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c | ||
55 | index 15d1f08..ad72295 100644 | ||
56 | --- a/drivers/gpu/drm/radeon/evergreen.c | ||
57 | +++ b/drivers/gpu/drm/radeon/evergreen.c | ||
58 | @@ -1912,7 +1912,7 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | ||
59 | rdev->config.evergreen.sx_max_export_size = 256; | ||
60 | rdev->config.evergreen.sx_max_export_pos_size = 64; | ||
61 | rdev->config.evergreen.sx_max_export_smx_size = 192; | ||
62 | - rdev->config.evergreen.max_hw_contexts = 8; | ||
63 | + rdev->config.evergreen.max_hw_contexts = 4; | ||
64 | rdev->config.evergreen.sq_num_cf_insts = 2; | ||
65 | |||
66 | rdev->config.evergreen.sc_prim_fifo_size = 0x40; | ||
67 | diff --git a/drivers/watchdog/ts72xx_wdt.c b/drivers/watchdog/ts72xx_wdt.c | ||
68 | index 8df050d..1c53745 100644 | ||
69 | --- a/drivers/watchdog/ts72xx_wdt.c | ||
70 | +++ b/drivers/watchdog/ts72xx_wdt.c | ||
71 | @@ -310,7 +310,8 @@ static long ts72xx_wdt_ioctl(struct file *file, unsigned int cmd, | ||
72 | |||
73 | case WDIOC_GETSTATUS: | ||
74 | case WDIOC_GETBOOTSTATUS: | ||
75 | - return put_user(0, p); | ||
76 | + error = put_user(0, p); | ||
77 | + break; | ||
78 | |||
79 | case WDIOC_KEEPALIVE: | ||
80 | ts72xx_wdt_kick(wdt); | ||
81 | diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c | ||
82 | index e712a8c..b1aa7fd 100644 | ||
83 | --- a/fs/ext4/xattr.c | ||
84 | +++ b/fs/ext4/xattr.c | ||
85 | @@ -1268,6 +1268,8 @@ retry: | ||
86 | s_min_extra_isize) { | ||
87 | tried_min_extra_isize++; | ||
88 | new_extra_isize = s_min_extra_isize; | ||
89 | + kfree(is); is = NULL; | ||
90 | + kfree(bs); bs = NULL; | ||
91 | goto retry; | ||
92 | } | ||
93 | error = -1; | ||
94 | diff --git a/fs/statfs.c b/fs/statfs.c | ||
95 | index 43e6b6f..d1812b2 100644 | ||
96 | --- a/fs/statfs.c | ||
97 | +++ b/fs/statfs.c | ||
98 | @@ -87,7 +87,7 @@ int user_statfs(const char __user *pathname, struct kstatfs *st) | ||
99 | |||
100 | int fd_statfs(int fd, struct kstatfs *st) | ||
101 | { | ||
102 | - struct file *file = fget(fd); | ||
103 | + struct file *file = fget_raw(fd); | ||
104 | int error = -EBADF; | ||
105 | if (file) { | ||
106 | error = vfs_statfs(&file->f_path, st); | ||
107 | diff --git a/include/linux/random.h b/include/linux/random.h | ||
108 | index ac621ce..7e58ad2 100644 | ||
109 | --- a/include/linux/random.h | ||
110 | +++ b/include/linux/random.h | ||
111 | @@ -56,6 +56,7 @@ extern void add_interrupt_randomness(int irq, int irq_flags); | ||
112 | extern void get_random_bytes(void *buf, int nbytes); | ||
113 | extern void get_random_bytes_arch(void *buf, int nbytes); | ||
114 | void generate_random_uuid(unsigned char uuid_out[16]); | ||
115 | +extern int random_int_secret_init(void); | ||
116 | |||
117 | #ifndef MODULE | ||
118 | extern const struct file_operations random_fops, urandom_fops; | ||
119 | diff --git a/init/main.c b/init/main.c | ||
120 | index 02c1384..db8e381 100644 | ||
121 | --- a/init/main.c | ||
122 | +++ b/init/main.c | ||
123 | @@ -68,6 +68,7 @@ | ||
124 | #include <linux/shmem_fs.h> | ||
125 | #include <linux/slab.h> | ||
126 | #include <linux/perf_event.h> | ||
127 | +#include <linux/random.h> | ||
128 | |||
129 | #include <asm/io.h> | ||
130 | #include <asm/bugs.h> | ||
131 | @@ -779,6 +780,7 @@ static void __init do_basic_setup(void) | ||
132 | do_ctors(); | ||
133 | usermodehelper_enable(); | ||
134 | do_initcalls(); | ||
135 | + random_int_secret_init(); | ||
136 | } | ||
137 | |||
138 | static void __init do_pre_smp_initcalls(void) | ||
139 | diff --git a/mm/mmap.c b/mm/mmap.c | ||
140 | index ed884dd..69367e4 100644 | ||
141 | --- a/mm/mmap.c | ||
142 | +++ b/mm/mmap.c | ||
143 | @@ -6,6 +6,7 @@ | ||
144 | * Address space accounting code <alan@lxorguk.ukuu.org.uk> | ||
145 | */ | ||
146 | |||
147 | +#include <linux/kernel.h> | ||
148 | #include <linux/slab.h> | ||
149 | #include <linux/backing-dev.h> | ||
150 | #include <linux/mm.h> | ||
151 | @@ -392,6 +393,34 @@ find_vma_prepare(struct mm_struct *mm, unsigned long addr, | ||
152 | return vma; | ||
153 | } | ||
154 | |||
155 | +static unsigned long count_vma_pages_range(struct mm_struct *mm, | ||
156 | + unsigned long addr, unsigned long end) | ||
157 | +{ | ||
158 | + unsigned long nr_pages = 0; | ||
159 | + struct vm_area_struct *vma; | ||
160 | + | ||
161 | + /* Find first overlaping mapping */ | ||
162 | + vma = find_vma_intersection(mm, addr, end); | ||
163 | + if (!vma) | ||
164 | + return 0; | ||
165 | + | ||
166 | + nr_pages = (min(end, vma->vm_end) - | ||
167 | + max(addr, vma->vm_start)) >> PAGE_SHIFT; | ||
168 | + | ||
169 | + /* Iterate over the rest of the overlaps */ | ||
170 | + for (vma = vma->vm_next; vma; vma = vma->vm_next) { | ||
171 | + unsigned long overlap_len; | ||
172 | + | ||
173 | + if (vma->vm_start > end) | ||
174 | + break; | ||
175 | + | ||
176 | + overlap_len = min(end, vma->vm_end) - vma->vm_start; | ||
177 | + nr_pages += overlap_len >> PAGE_SHIFT; | ||
178 | + } | ||
179 | + | ||
180 | + return nr_pages; | ||
181 | +} | ||
182 | + | ||
183 | void __vma_link_rb(struct mm_struct *mm, struct vm_area_struct *vma, | ||
184 | struct rb_node **rb_link, struct rb_node *rb_parent) | ||
185 | { | ||
186 | @@ -1245,6 +1274,23 @@ unsigned long mmap_region(struct file *file, unsigned long addr, | ||
187 | unsigned long charged = 0; | ||
188 | struct inode *inode = file ? file->f_path.dentry->d_inode : NULL; | ||
189 | |||
190 | + /* Check against address space limit. */ | ||
191 | + if (!may_expand_vm(mm, len >> PAGE_SHIFT)) { | ||
192 | + unsigned long nr_pages; | ||
193 | + | ||
194 | + /* | ||
195 | + * MAP_FIXED may remove pages of mappings that intersects with | ||
196 | + * requested mapping. Account for the pages it would unmap. | ||
197 | + */ | ||
198 | + if (!(vm_flags & MAP_FIXED)) | ||
199 | + return -ENOMEM; | ||
200 | + | ||
201 | + nr_pages = count_vma_pages_range(mm, addr, addr + len); | ||
202 | + | ||
203 | + if (!may_expand_vm(mm, (len >> PAGE_SHIFT) - nr_pages)) | ||
204 | + return -ENOMEM; | ||
205 | + } | ||
206 | + | ||
207 | /* Clear old maps */ | ||
208 | error = -ENOMEM; | ||
209 | munmap_back: | ||
210 | @@ -1255,10 +1301,6 @@ munmap_back: | ||
211 | goto munmap_back; | ||
212 | } | ||
213 | |||
214 | - /* Check against address space limit. */ | ||
215 | - if (!may_expand_vm(mm, len >> PAGE_SHIFT)) | ||
216 | - return -ENOMEM; | ||
217 | - | ||
218 | /* | ||
219 | * Set 'VM_NORESERVE' if we should not account for the | ||
220 | * memory use of this mapping. | ||
221 | @@ -1833,9 +1875,28 @@ int expand_downwards(struct vm_area_struct *vma, | ||
222 | return error; | ||
223 | } | ||
224 | |||
225 | +/* | ||
226 | + * Note how expand_stack() refuses to expand the stack all the way to | ||
227 | + * abut the next virtual mapping, *unless* that mapping itself is also | ||
228 | + * a stack mapping. We want to leave room for a guard page, after all | ||
229 | + * (the guard page itself is not added here, that is done by the | ||
230 | + * actual page faulting logic) | ||
231 | + * | ||
232 | + * This matches the behavior of the guard page logic (see mm/memory.c: | ||
233 | + * check_stack_guard_page()), which only allows the guard page to be | ||
234 | + * removed under these circumstances. | ||
235 | + */ | ||
236 | #ifdef CONFIG_STACK_GROWSUP | ||
237 | int expand_stack(struct vm_area_struct *vma, unsigned long address) | ||
238 | { | ||
239 | + struct vm_area_struct *next; | ||
240 | + | ||
241 | + address &= PAGE_MASK; | ||
242 | + next = vma->vm_next; | ||
243 | + if (next && next->vm_start == address + PAGE_SIZE) { | ||
244 | + if (!(next->vm_flags & VM_GROWSUP)) | ||
245 | + return -ENOMEM; | ||
246 | + } | ||
247 | return expand_upwards(vma, address); | ||
248 | } | ||
249 | |||
250 | @@ -1858,6 +1919,14 @@ find_extend_vma(struct mm_struct *mm, unsigned long addr) | ||
251 | #else | ||
252 | int expand_stack(struct vm_area_struct *vma, unsigned long address) | ||
253 | { | ||
254 | + struct vm_area_struct *prev; | ||
255 | + | ||
256 | + address &= PAGE_MASK; | ||
257 | + prev = vma->vm_prev; | ||
258 | + if (prev && prev->vm_end == address) { | ||
259 | + if (!(prev->vm_flags & VM_GROWSDOWN)) | ||
260 | + return -ENOMEM; | ||
261 | + } | ||
262 | return expand_downwards(vma, address); | ||
263 | } | ||
264 | |||
265 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
266 | index 353b32a..33abb78 100644 | ||
267 | --- a/sound/pci/hda/patch_realtek.c | ||
268 | +++ b/sound/pci/hda/patch_realtek.c | ||
269 | @@ -6832,6 +6832,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { | ||
270 | SND_PCI_QUIRK(0x1025, 0x031c, "Gateway NV79", ALC662_FIXUP_SKU_IGNORE), | ||
271 | SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE), | ||
272 | SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800), | ||
273 | + SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4), | ||
274 | SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT), | ||
275 | SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2), | ||
276 | SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), | ||
277 | diff --git a/sound/usb/usx2y/usbusx2yaudio.c b/sound/usb/usx2y/usbusx2yaudio.c | ||
278 | index 520ef96..711299c 100644 | ||
279 | --- a/sound/usb/usx2y/usbusx2yaudio.c | ||
280 | +++ b/sound/usb/usx2y/usbusx2yaudio.c | ||
281 | @@ -295,19 +295,6 @@ static void usX2Y_error_urb_status(struct usX2Ydev *usX2Y, | ||
282 | usX2Y_clients_stop(usX2Y); | ||
283 | } | ||
284 | |||
285 | -static void usX2Y_error_sequence(struct usX2Ydev *usX2Y, | ||
286 | - struct snd_usX2Y_substream *subs, struct urb *urb) | ||
287 | -{ | ||
288 | - snd_printk(KERN_ERR | ||
289 | -"Sequence Error!(hcd_frame=%i ep=%i%s;wait=%i,frame=%i).\n" | ||
290 | -"Most probably some urb of usb-frame %i is still missing.\n" | ||
291 | -"Cause could be too long delays in usb-hcd interrupt handling.\n", | ||
292 | - usb_get_current_frame_number(usX2Y->dev), | ||
293 | - subs->endpoint, usb_pipein(urb->pipe) ? "in" : "out", | ||
294 | - usX2Y->wait_iso_frame, urb->start_frame, usX2Y->wait_iso_frame); | ||
295 | - usX2Y_clients_stop(usX2Y); | ||
296 | -} | ||
297 | - | ||
298 | static void i_usX2Y_urb_complete(struct urb *urb) | ||
299 | { | ||
300 | struct snd_usX2Y_substream *subs = urb->context; | ||
301 | @@ -324,12 +311,9 @@ static void i_usX2Y_urb_complete(struct urb *urb) | ||
302 | usX2Y_error_urb_status(usX2Y, subs, urb); | ||
303 | return; | ||
304 | } | ||
305 | - if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF))) | ||
306 | - subs->completed_urb = urb; | ||
307 | - else { | ||
308 | - usX2Y_error_sequence(usX2Y, subs, urb); | ||
309 | - return; | ||
310 | - } | ||
311 | + | ||
312 | + subs->completed_urb = urb; | ||
313 | + | ||
314 | { | ||
315 | struct snd_usX2Y_substream *capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE], | ||
316 | *playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK]; | ||
317 | diff --git a/sound/usb/usx2y/usx2yhwdeppcm.c b/sound/usb/usx2y/usx2yhwdeppcm.c | ||
318 | index 8e40b6e..1da1eca 100644 | ||
319 | --- a/sound/usb/usx2y/usx2yhwdeppcm.c | ||
320 | +++ b/sound/usb/usx2y/usx2yhwdeppcm.c | ||
321 | @@ -244,13 +244,8 @@ static void i_usX2Y_usbpcm_urb_complete(struct urb *urb) | ||
322 | usX2Y_error_urb_status(usX2Y, subs, urb); | ||
323 | return; | ||
324 | } | ||
325 | - if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF))) | ||
326 | - subs->completed_urb = urb; | ||
327 | - else { | ||
328 | - usX2Y_error_sequence(usX2Y, subs, urb); | ||
329 | - return; | ||
330 | - } | ||
331 | |||
332 | + subs->completed_urb = urb; | ||
333 | capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE]; | ||
334 | capsubs2 = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2]; | ||
335 | playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK]; |