Magellan Linux

Annotation of /trunk/kernel26-alx/patches-3.10/0136-3.10.37-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2672 - (hide annotations) (download)
Tue Jul 21 16:46:35 2015 UTC (8 years, 10 months ago) by niro
File size: 50505 byte(s)
-3.10.84-alx-r1
1 niro 2672 diff --git a/Makefile b/Makefile
2     index b5f4ef30f6e6..bd9fb5b72fc0 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 10
8     -SUBLEVEL = 36
9     +SUBLEVEL = 37
10     EXTRAVERSION =
11     NAME = TOSSUG Baby Fish
12    
13     diff --git a/arch/arc/boot/dts/nsimosci.dts b/arch/arc/boot/dts/nsimosci.dts
14     index ea16d782af58..4f31b2eb5cdf 100644
15     --- a/arch/arc/boot/dts/nsimosci.dts
16     +++ b/arch/arc/boot/dts/nsimosci.dts
17     @@ -11,13 +11,16 @@
18    
19     / {
20     compatible = "snps,nsimosci";
21     - clock-frequency = <80000000>; /* 80 MHZ */
22     + clock-frequency = <20000000>; /* 20 MHZ */
23     #address-cells = <1>;
24     #size-cells = <1>;
25     interrupt-parent = <&intc>;
26    
27     chosen {
28     - bootargs = "console=tty0 consoleblank=0";
29     + /* this is for console on PGU */
30     + /* bootargs = "console=tty0 consoleblank=0"; */
31     + /* this is for console on serial */
32     + bootargs = "earlycon=uart8250,mmio32,0xc0000000,115200n8 console=ttyS0,115200n8 consoleblank=0 debug";
33     };
34    
35     aliases {
36     @@ -44,15 +47,14 @@
37     };
38    
39     uart0: serial@c0000000 {
40     - compatible = "snps,dw-apb-uart";
41     + compatible = "ns8250";
42     reg = <0xc0000000 0x2000>;
43     interrupts = <11>;
44     - #clock-frequency = <80000000>;
45     clock-frequency = <3686400>;
46     baud = <115200>;
47     reg-shift = <2>;
48     reg-io-width = <4>;
49     - status = "okay";
50     + no-loopback-test = <1>;
51     };
52    
53     pgu0: pgu@c9000000 {
54     diff --git a/arch/arc/configs/nsimosci_defconfig b/arch/arc/configs/nsimosci_defconfig
55     index 446c96c24eff..00788e741ce7 100644
56     --- a/arch/arc/configs/nsimosci_defconfig
57     +++ b/arch/arc/configs/nsimosci_defconfig
58     @@ -54,6 +54,7 @@ CONFIG_SERIO_ARC_PS2=y
59     CONFIG_SERIAL_8250=y
60     CONFIG_SERIAL_8250_CONSOLE=y
61     CONFIG_SERIAL_8250_DW=y
62     +CONFIG_SERIAL_OF_PLATFORM=y
63     CONFIG_SERIAL_ARC=y
64     CONFIG_SERIAL_ARC_CONSOLE=y
65     # CONFIG_HW_RANDOM is not set
66     diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
67     index 821170e5f6ed..b969eea4e237 100644
68     --- a/arch/m68k/Kconfig
69     +++ b/arch/m68k/Kconfig
70     @@ -16,6 +16,7 @@ config M68K
71     select FPU if MMU
72     select ARCH_WANT_IPC_PARSE_VERSION
73     select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE
74     + select HAVE_FUTEX_CMPXCHG if MMU && FUTEX
75     select HAVE_MOD_ARCH_SPECIFIC
76     select MODULES_USE_ELF_REL
77     select MODULES_USE_ELF_RELA
78     diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
79     index 97dcbea97a1c..d8d6eeca56b0 100644
80     --- a/arch/s390/Kconfig
81     +++ b/arch/s390/Kconfig
82     @@ -116,6 +116,7 @@ config S390
83     select HAVE_FUNCTION_GRAPH_TRACER
84     select HAVE_FUNCTION_TRACER
85     select HAVE_FUNCTION_TRACE_MCOUNT_TEST
86     + select HAVE_FUTEX_CMPXCHG if FUTEX
87     select HAVE_KERNEL_BZIP2
88     select HAVE_KERNEL_GZIP
89     select HAVE_KERNEL_LZMA
90     diff --git a/arch/x86/crypto/ghash-clmulni-intel_asm.S b/arch/x86/crypto/ghash-clmulni-intel_asm.S
91     index 586f41aac361..185fad49d86f 100644
92     --- a/arch/x86/crypto/ghash-clmulni-intel_asm.S
93     +++ b/arch/x86/crypto/ghash-clmulni-intel_asm.S
94     @@ -24,10 +24,6 @@
95     .align 16
96     .Lbswap_mask:
97     .octa 0x000102030405060708090a0b0c0d0e0f
98     -.Lpoly:
99     - .octa 0xc2000000000000000000000000000001
100     -.Ltwo_one:
101     - .octa 0x00000001000000000000000000000001
102    
103     #define DATA %xmm0
104     #define SHASH %xmm1
105     @@ -134,28 +130,3 @@ ENTRY(clmul_ghash_update)
106     .Lupdate_just_ret:
107     ret
108     ENDPROC(clmul_ghash_update)
109     -
110     -/*
111     - * void clmul_ghash_setkey(be128 *shash, const u8 *key);
112     - *
113     - * Calculate hash_key << 1 mod poly
114     - */
115     -ENTRY(clmul_ghash_setkey)
116     - movaps .Lbswap_mask, BSWAP
117     - movups (%rsi), %xmm0
118     - PSHUFB_XMM BSWAP %xmm0
119     - movaps %xmm0, %xmm1
120     - psllq $1, %xmm0
121     - psrlq $63, %xmm1
122     - movaps %xmm1, %xmm2
123     - pslldq $8, %xmm1
124     - psrldq $8, %xmm2
125     - por %xmm1, %xmm0
126     - # reduction
127     - pshufd $0b00100100, %xmm2, %xmm1
128     - pcmpeqd .Ltwo_one, %xmm1
129     - pand .Lpoly, %xmm1
130     - pxor %xmm1, %xmm0
131     - movups %xmm0, (%rdi)
132     - ret
133     -ENDPROC(clmul_ghash_setkey)
134     diff --git a/arch/x86/crypto/ghash-clmulni-intel_glue.c b/arch/x86/crypto/ghash-clmulni-intel_glue.c
135     index 6759dd1135be..d785cf2c529c 100644
136     --- a/arch/x86/crypto/ghash-clmulni-intel_glue.c
137     +++ b/arch/x86/crypto/ghash-clmulni-intel_glue.c
138     @@ -30,8 +30,6 @@ void clmul_ghash_mul(char *dst, const be128 *shash);
139     void clmul_ghash_update(char *dst, const char *src, unsigned int srclen,
140     const be128 *shash);
141    
142     -void clmul_ghash_setkey(be128 *shash, const u8 *key);
143     -
144     struct ghash_async_ctx {
145     struct cryptd_ahash *cryptd_tfm;
146     };
147     @@ -58,13 +56,23 @@ static int ghash_setkey(struct crypto_shash *tfm,
148     const u8 *key, unsigned int keylen)
149     {
150     struct ghash_ctx *ctx = crypto_shash_ctx(tfm);
151     + be128 *x = (be128 *)key;
152     + u64 a, b;
153    
154     if (keylen != GHASH_BLOCK_SIZE) {
155     crypto_shash_set_flags(tfm, CRYPTO_TFM_RES_BAD_KEY_LEN);
156     return -EINVAL;
157     }
158    
159     - clmul_ghash_setkey(&ctx->shash, key);
160     + /* perform multiplication by 'x' in GF(2^128) */
161     + a = be64_to_cpu(x->a);
162     + b = be64_to_cpu(x->b);
163     +
164     + ctx->shash.a = (__be64)((b << 1) | (a >> 63));
165     + ctx->shash.b = (__be64)((a << 1) | (b >> 63));
166     +
167     + if (a >> 63)
168     + ctx->shash.b ^= cpu_to_be64(0xc2);
169    
170     return 0;
171     }
172     diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
173     index 648554742a99..66f6cf5064ec 100644
174     --- a/drivers/cpufreq/cpufreq.c
175     +++ b/drivers/cpufreq/cpufreq.c
176     @@ -46,6 +46,7 @@ static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data);
177     static DEFINE_PER_CPU(char[CPUFREQ_NAME_LEN], cpufreq_cpu_governor);
178     #endif
179     static DEFINE_RWLOCK(cpufreq_driver_lock);
180     +static DEFINE_MUTEX(cpufreq_governor_lock);
181    
182     /*
183     * cpu_policy_rwsem is a per CPU reader-writer semaphore designed to cure
184     @@ -1563,6 +1564,21 @@ static int __cpufreq_governor(struct cpufreq_policy *policy,
185    
186     pr_debug("__cpufreq_governor for CPU %u, event %u\n",
187     policy->cpu, event);
188     +
189     + mutex_lock(&cpufreq_governor_lock);
190     + if ((!policy->governor_enabled && (event == CPUFREQ_GOV_STOP)) ||
191     + (policy->governor_enabled && (event == CPUFREQ_GOV_START))) {
192     + mutex_unlock(&cpufreq_governor_lock);
193     + return -EBUSY;
194     + }
195     +
196     + if (event == CPUFREQ_GOV_STOP)
197     + policy->governor_enabled = false;
198     + else if (event == CPUFREQ_GOV_START)
199     + policy->governor_enabled = true;
200     +
201     + mutex_unlock(&cpufreq_governor_lock);
202     +
203     ret = policy->governor->governor(policy, event);
204    
205     if (!ret) {
206     @@ -1570,6 +1586,14 @@ static int __cpufreq_governor(struct cpufreq_policy *policy,
207     policy->governor->initialized++;
208     else if (event == CPUFREQ_GOV_POLICY_EXIT)
209     policy->governor->initialized--;
210     + } else {
211     + /* Restore original values */
212     + mutex_lock(&cpufreq_governor_lock);
213     + if (event == CPUFREQ_GOV_STOP)
214     + policy->governor_enabled = true;
215     + else if (event == CPUFREQ_GOV_START)
216     + policy->governor_enabled = false;
217     + mutex_unlock(&cpufreq_governor_lock);
218     }
219    
220     /* we keep one module reference alive for
221     diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
222     index a86ff72141f3..28a0b32c73b3 100644
223     --- a/drivers/cpufreq/cpufreq_governor.c
224     +++ b/drivers/cpufreq/cpufreq_governor.c
225     @@ -177,6 +177,9 @@ void gov_queue_work(struct dbs_data *dbs_data, struct cpufreq_policy *policy,
226     {
227     int i;
228    
229     + if (!policy->governor_enabled)
230     + return;
231     +
232     if (!all_cpus) {
233     __gov_queue_work(smp_processor_id(), dbs_data, delay);
234     } else {
235     diff --git a/drivers/cpufreq/powernow-k6.c b/drivers/cpufreq/powernow-k6.c
236     index ea0222a45b7b..b07ca0d3f56a 100644
237     --- a/drivers/cpufreq/powernow-k6.c
238     +++ b/drivers/cpufreq/powernow-k6.c
239     @@ -26,41 +26,108 @@
240     static unsigned int busfreq; /* FSB, in 10 kHz */
241     static unsigned int max_multiplier;
242    
243     +static unsigned int param_busfreq = 0;
244     +static unsigned int param_max_multiplier = 0;
245     +
246     +module_param_named(max_multiplier, param_max_multiplier, uint, S_IRUGO);
247     +MODULE_PARM_DESC(max_multiplier, "Maximum multiplier (allowed values: 20 30 35 40 45 50 55 60)");
248     +
249     +module_param_named(bus_frequency, param_busfreq, uint, S_IRUGO);
250     +MODULE_PARM_DESC(bus_frequency, "Bus frequency in kHz");
251    
252     /* Clock ratio multiplied by 10 - see table 27 in AMD#23446 */
253     static struct cpufreq_frequency_table clock_ratio[] = {
254     - {45, /* 000 -> 4.5x */ 0},
255     + {60, /* 110 -> 6.0x */ 0},
256     + {55, /* 011 -> 5.5x */ 0},
257     {50, /* 001 -> 5.0x */ 0},
258     + {45, /* 000 -> 4.5x */ 0},
259     {40, /* 010 -> 4.0x */ 0},
260     - {55, /* 011 -> 5.5x */ 0},
261     - {20, /* 100 -> 2.0x */ 0},
262     - {30, /* 101 -> 3.0x */ 0},
263     - {60, /* 110 -> 6.0x */ 0},
264     {35, /* 111 -> 3.5x */ 0},
265     + {30, /* 101 -> 3.0x */ 0},
266     + {20, /* 100 -> 2.0x */ 0},
267     {0, CPUFREQ_TABLE_END}
268     };
269    
270     +static const u8 index_to_register[8] = { 6, 3, 1, 0, 2, 7, 5, 4 };
271     +static const u8 register_to_index[8] = { 3, 2, 4, 1, 7, 6, 0, 5 };
272     +
273     +static const struct {
274     + unsigned freq;
275     + unsigned mult;
276     +} usual_frequency_table[] = {
277     + { 400000, 40 }, // 100 * 4
278     + { 450000, 45 }, // 100 * 4.5
279     + { 475000, 50 }, // 95 * 5
280     + { 500000, 50 }, // 100 * 5
281     + { 506250, 45 }, // 112.5 * 4.5
282     + { 533500, 55 }, // 97 * 5.5
283     + { 550000, 55 }, // 100 * 5.5
284     + { 562500, 50 }, // 112.5 * 5
285     + { 570000, 60 }, // 95 * 6
286     + { 600000, 60 }, // 100 * 6
287     + { 618750, 55 }, // 112.5 * 5.5
288     + { 660000, 55 }, // 120 * 5.5
289     + { 675000, 60 }, // 112.5 * 6
290     + { 720000, 60 }, // 120 * 6
291     +};
292     +
293     +#define FREQ_RANGE 3000
294    
295     /**
296     * powernow_k6_get_cpu_multiplier - returns the current FSB multiplier
297     *
298     - * Returns the current setting of the frequency multiplier. Core clock
299     + * Returns the current setting of the frequency multiplier. Core clock
300     * speed is frequency of the Front-Side Bus multiplied with this value.
301     */
302     static int powernow_k6_get_cpu_multiplier(void)
303     {
304     - u64 invalue = 0;
305     + unsigned long invalue = 0;
306     u32 msrval;
307    
308     + local_irq_disable();
309     +
310     msrval = POWERNOW_IOPORT + 0x1;
311     wrmsr(MSR_K6_EPMR, msrval, 0); /* enable the PowerNow port */
312     invalue = inl(POWERNOW_IOPORT + 0x8);
313     msrval = POWERNOW_IOPORT + 0x0;
314     wrmsr(MSR_K6_EPMR, msrval, 0); /* disable it again */
315    
316     - return clock_ratio[(invalue >> 5)&7].index;
317     + local_irq_enable();
318     +
319     + return clock_ratio[register_to_index[(invalue >> 5)&7]].index;
320     }
321    
322     +static void powernow_k6_set_cpu_multiplier(unsigned int best_i)
323     +{
324     + unsigned long outvalue, invalue;
325     + unsigned long msrval;
326     + unsigned long cr0;
327     +
328     + /* we now need to transform best_i to the BVC format, see AMD#23446 */
329     +
330     + /*
331     + * The processor doesn't respond to inquiry cycles while changing the
332     + * frequency, so we must disable cache.
333     + */
334     + local_irq_disable();
335     + cr0 = read_cr0();
336     + write_cr0(cr0 | X86_CR0_CD);
337     + wbinvd();
338     +
339     + outvalue = (1<<12) | (1<<10) | (1<<9) | (index_to_register[best_i]<<5);
340     +
341     + msrval = POWERNOW_IOPORT + 0x1;
342     + wrmsr(MSR_K6_EPMR, msrval, 0); /* enable the PowerNow port */
343     + invalue = inl(POWERNOW_IOPORT + 0x8);
344     + invalue = invalue & 0x1f;
345     + outvalue = outvalue | invalue;
346     + outl(outvalue, (POWERNOW_IOPORT + 0x8));
347     + msrval = POWERNOW_IOPORT + 0x0;
348     + wrmsr(MSR_K6_EPMR, msrval, 0); /* disable it again */
349     +
350     + write_cr0(cr0);
351     + local_irq_enable();
352     +}
353    
354     /**
355     * powernow_k6_set_state - set the PowerNow! multiplier
356     @@ -71,8 +138,6 @@ static int powernow_k6_get_cpu_multiplier(void)
357     static void powernow_k6_set_state(struct cpufreq_policy *policy,
358     unsigned int best_i)
359     {
360     - unsigned long outvalue = 0, invalue = 0;
361     - unsigned long msrval;
362     struct cpufreq_freqs freqs;
363    
364     if (clock_ratio[best_i].index > max_multiplier) {
365     @@ -85,18 +150,7 @@ static void powernow_k6_set_state(struct cpufreq_policy *policy,
366    
367     cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE);
368    
369     - /* we now need to transform best_i to the BVC format, see AMD#23446 */
370     -
371     - outvalue = (1<<12) | (1<<10) | (1<<9) | (best_i<<5);
372     -
373     - msrval = POWERNOW_IOPORT + 0x1;
374     - wrmsr(MSR_K6_EPMR, msrval, 0); /* enable the PowerNow port */
375     - invalue = inl(POWERNOW_IOPORT + 0x8);
376     - invalue = invalue & 0xf;
377     - outvalue = outvalue | invalue;
378     - outl(outvalue , (POWERNOW_IOPORT + 0x8));
379     - msrval = POWERNOW_IOPORT + 0x0;
380     - wrmsr(MSR_K6_EPMR, msrval, 0); /* disable it again */
381     + powernow_k6_set_cpu_multiplier(best_i);
382    
383     cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
384    
385     @@ -141,18 +195,57 @@ static int powernow_k6_target(struct cpufreq_policy *policy,
386     return 0;
387     }
388    
389     -
390     static int powernow_k6_cpu_init(struct cpufreq_policy *policy)
391     {
392     unsigned int i, f;
393     int result;
394     + unsigned khz;
395    
396     if (policy->cpu != 0)
397     return -ENODEV;
398    
399     - /* get frequencies */
400     - max_multiplier = powernow_k6_get_cpu_multiplier();
401     - busfreq = cpu_khz / max_multiplier;
402     + max_multiplier = 0;
403     + khz = cpu_khz;
404     + for (i = 0; i < ARRAY_SIZE(usual_frequency_table); i++) {
405     + if (khz >= usual_frequency_table[i].freq - FREQ_RANGE &&
406     + khz <= usual_frequency_table[i].freq + FREQ_RANGE) {
407     + khz = usual_frequency_table[i].freq;
408     + max_multiplier = usual_frequency_table[i].mult;
409     + break;
410     + }
411     + }
412     + if (param_max_multiplier) {
413     + for (i = 0; (clock_ratio[i].frequency != CPUFREQ_TABLE_END); i++) {
414     + if (clock_ratio[i].index == param_max_multiplier) {
415     + max_multiplier = param_max_multiplier;
416     + goto have_max_multiplier;
417     + }
418     + }
419     + printk(KERN_ERR "powernow-k6: invalid max_multiplier parameter, valid parameters 20, 30, 35, 40, 45, 50, 55, 60\n");
420     + return -EINVAL;
421     + }
422     +
423     + if (!max_multiplier) {
424     + printk(KERN_WARNING "powernow-k6: unknown frequency %u, cannot determine current multiplier\n", khz);
425     + printk(KERN_WARNING "powernow-k6: use module parameters max_multiplier and bus_frequency\n");
426     + return -EOPNOTSUPP;
427     + }
428     +
429     +have_max_multiplier:
430     + param_max_multiplier = max_multiplier;
431     +
432     + if (param_busfreq) {
433     + if (param_busfreq >= 50000 && param_busfreq <= 150000) {
434     + busfreq = param_busfreq / 10;
435     + goto have_busfreq;
436     + }
437     + printk(KERN_ERR "powernow-k6: invalid bus_frequency parameter, allowed range 50000 - 150000 kHz\n");
438     + return -EINVAL;
439     + }
440     +
441     + busfreq = khz / max_multiplier;
442     +have_busfreq:
443     + param_busfreq = busfreq * 10;
444    
445     /* table init */
446     for (i = 0; (clock_ratio[i].frequency != CPUFREQ_TABLE_END); i++) {
447     @@ -164,7 +257,7 @@ static int powernow_k6_cpu_init(struct cpufreq_policy *policy)
448     }
449    
450     /* cpuinfo and default policy values */
451     - policy->cpuinfo.transition_latency = 200000;
452     + policy->cpuinfo.transition_latency = 500000;
453     policy->cur = busfreq * max_multiplier;
454    
455     result = cpufreq_frequency_table_cpuinfo(policy, clock_ratio);
456     diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c
457     index 8dfaaae94444..2253271b3fac 100644
458     --- a/drivers/cpuidle/driver.c
459     +++ b/drivers/cpuidle/driver.c
460     @@ -251,7 +251,8 @@ struct cpuidle_driver *cpuidle_driver_ref(void)
461     spin_lock(&cpuidle_driver_lock);
462    
463     drv = cpuidle_get_driver();
464     - drv->refcnt++;
465     + if (drv)
466     + drv->refcnt++;
467    
468     spin_unlock(&cpuidle_driver_lock);
469     return drv;
470     diff --git a/drivers/isdn/isdnloop/isdnloop.c b/drivers/isdn/isdnloop/isdnloop.c
471     index 02125e6a9109..5a4da94aefb0 100644
472     --- a/drivers/isdn/isdnloop/isdnloop.c
473     +++ b/drivers/isdn/isdnloop/isdnloop.c
474     @@ -518,9 +518,9 @@ static isdnloop_stat isdnloop_cmd_table[] =
475     static void
476     isdnloop_fake_err(isdnloop_card *card)
477     {
478     - char buf[60];
479     + char buf[64];
480    
481     - sprintf(buf, "E%s", card->omsg);
482     + snprintf(buf, sizeof(buf), "E%s", card->omsg);
483     isdnloop_fake(card, buf, -1);
484     isdnloop_fake(card, "NAK", -1);
485     }
486     @@ -903,6 +903,8 @@ isdnloop_parse_cmd(isdnloop_card *card)
487     case 7:
488     /* 0x;EAZ */
489     p += 3;
490     + if (strlen(p) >= sizeof(card->eazlist[0]))
491     + break;
492     strcpy(card->eazlist[ch - 1], p);
493     break;
494     case 8:
495     @@ -1070,6 +1072,12 @@ isdnloop_start(isdnloop_card *card, isdnloop_sdef *sdefp)
496     return -EBUSY;
497     if (copy_from_user((char *) &sdef, (char *) sdefp, sizeof(sdef)))
498     return -EFAULT;
499     +
500     + for (i = 0; i < 3; i++) {
501     + if (!memchr(sdef.num[i], 0, sizeof(sdef.num[i])))
502     + return -EINVAL;
503     + }
504     +
505     spin_lock_irqsave(&card->isdnloop_lock, flags);
506     switch (sdef.ptype) {
507     case ISDN_PTYPE_EURO:
508     @@ -1127,7 +1135,7 @@ isdnloop_command(isdn_ctrl *c, isdnloop_card *card)
509     {
510     ulong a;
511     int i;
512     - char cbuf[60];
513     + char cbuf[80];
514     isdn_ctrl cmd;
515     isdnloop_cdef cdef;
516    
517     @@ -1192,7 +1200,6 @@ isdnloop_command(isdn_ctrl *c, isdnloop_card *card)
518     break;
519     if ((c->arg & 255) < ISDNLOOP_BCH) {
520     char *p;
521     - char dial[50];
522     char dcode[4];
523    
524     a = c->arg;
525     @@ -1204,10 +1211,10 @@ isdnloop_command(isdn_ctrl *c, isdnloop_card *card)
526     } else
527     /* Normal Dial */
528     strcpy(dcode, "CAL");
529     - strcpy(dial, p);
530     - sprintf(cbuf, "%02d;D%s_R%s,%02d,%02d,%s\n", (int) (a + 1),
531     - dcode, dial, c->parm.setup.si1,
532     - c->parm.setup.si2, c->parm.setup.eazmsn);
533     + snprintf(cbuf, sizeof(cbuf),
534     + "%02d;D%s_R%s,%02d,%02d,%s\n", (int) (a + 1),
535     + dcode, p, c->parm.setup.si1,
536     + c->parm.setup.si2, c->parm.setup.eazmsn);
537     i = isdnloop_writecmd(cbuf, strlen(cbuf), 0, card);
538     }
539     break;
540     diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
541     index e27d5c839be5..4a0db617ab64 100644
542     --- a/drivers/net/ethernet/broadcom/tg3.c
543     +++ b/drivers/net/ethernet/broadcom/tg3.c
544     @@ -17308,8 +17308,6 @@ static int tg3_init_one(struct pci_dev *pdev,
545    
546     tg3_init_bufmgr_config(tp);
547    
548     - features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
549     -
550     /* 5700 B0 chips do not support checksumming correctly due
551     * to hardware bugs.
552     */
553     @@ -17341,7 +17339,8 @@ static int tg3_init_one(struct pci_dev *pdev,
554     features |= NETIF_F_TSO_ECN;
555     }
556    
557     - dev->features |= features;
558     + dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX |
559     + NETIF_F_HW_VLAN_CTAG_RX;
560     dev->vlan_features |= features;
561    
562     /*
563     diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
564     index f6dce4765de4..3d50e7db141e 100644
565     --- a/drivers/net/usb/usbnet.c
566     +++ b/drivers/net/usb/usbnet.c
567     @@ -727,14 +727,12 @@ EXPORT_SYMBOL_GPL(usbnet_unlink_rx_urbs);
568     // precondition: never called in_interrupt
569     static void usbnet_terminate_urbs(struct usbnet *dev)
570     {
571     - DECLARE_WAIT_QUEUE_HEAD_ONSTACK(unlink_wakeup);
572     DECLARE_WAITQUEUE(wait, current);
573     int temp;
574    
575     /* ensure there are no more active urbs */
576     - add_wait_queue(&unlink_wakeup, &wait);
577     + add_wait_queue(&dev->wait, &wait);
578     set_current_state(TASK_UNINTERRUPTIBLE);
579     - dev->wait = &unlink_wakeup;
580     temp = unlink_urbs(dev, &dev->txq) +
581     unlink_urbs(dev, &dev->rxq);
582    
583     @@ -748,15 +746,14 @@ static void usbnet_terminate_urbs(struct usbnet *dev)
584     "waited for %d urb completions\n", temp);
585     }
586     set_current_state(TASK_RUNNING);
587     - dev->wait = NULL;
588     - remove_wait_queue(&unlink_wakeup, &wait);
589     + remove_wait_queue(&dev->wait, &wait);
590     }
591    
592     int usbnet_stop (struct net_device *net)
593     {
594     struct usbnet *dev = netdev_priv(net);
595     struct driver_info *info = dev->driver_info;
596     - int retval;
597     + int retval, pm;
598    
599     clear_bit(EVENT_DEV_OPEN, &dev->flags);
600     netif_stop_queue (net);
601     @@ -766,6 +763,8 @@ int usbnet_stop (struct net_device *net)
602     net->stats.rx_packets, net->stats.tx_packets,
603     net->stats.rx_errors, net->stats.tx_errors);
604    
605     + /* to not race resume */
606     + pm = usb_autopm_get_interface(dev->intf);
607     /* allow minidriver to stop correctly (wireless devices to turn off
608     * radio etc) */
609     if (info->stop) {
610     @@ -792,6 +791,9 @@ int usbnet_stop (struct net_device *net)
611     dev->flags = 0;
612     del_timer_sync (&dev->delay);
613     tasklet_kill (&dev->bh);
614     + if (!pm)
615     + usb_autopm_put_interface(dev->intf);
616     +
617     if (info->manage_power &&
618     !test_and_clear_bit(EVENT_NO_RUNTIME_PM, &dev->flags))
619     info->manage_power(dev, 0);
620     @@ -1360,11 +1362,12 @@ static void usbnet_bh (unsigned long param)
621     /* restart RX again after disabling due to high error rate */
622     clear_bit(EVENT_RX_KILL, &dev->flags);
623    
624     - // waiting for all pending urbs to complete?
625     - if (dev->wait) {
626     - if ((dev->txq.qlen + dev->rxq.qlen + dev->done.qlen) == 0) {
627     - wake_up (dev->wait);
628     - }
629     + /* waiting for all pending urbs to complete?
630     + * only then can we forgo submitting anew
631     + */
632     + if (waitqueue_active(&dev->wait)) {
633     + if (dev->txq.qlen + dev->rxq.qlen + dev->done.qlen == 0)
634     + wake_up_all(&dev->wait);
635    
636     // or are we maybe short a few urbs?
637     } else if (netif_running (dev->net) &&
638     @@ -1502,6 +1505,7 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
639     dev->driver_name = name;
640     dev->msg_enable = netif_msg_init (msg_level, NETIF_MSG_DRV
641     | NETIF_MSG_PROBE | NETIF_MSG_LINK);
642     + init_waitqueue_head(&dev->wait);
643     skb_queue_head_init (&dev->rxq);
644     skb_queue_head_init (&dev->txq);
645     skb_queue_head_init (&dev->done);
646     @@ -1694,9 +1698,10 @@ int usbnet_resume (struct usb_interface *intf)
647     spin_unlock_irq(&dev->txq.lock);
648    
649     if (test_bit(EVENT_DEV_OPEN, &dev->flags)) {
650     - /* handle remote wakeup ASAP */
651     - if (!dev->wait &&
652     - netif_device_present(dev->net) &&
653     + /* handle remote wakeup ASAP
654     + * we cannot race against stop
655     + */
656     + if (netif_device_present(dev->net) &&
657     !timer_pending(&dev->delay) &&
658     !test_bit(EVENT_RX_HALT, &dev->flags))
659     rx_alloc_submit(dev, GFP_NOIO);
660     diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
661     index 054489fdf54a..9673edfff451 100644
662     --- a/drivers/net/vxlan.c
663     +++ b/drivers/net/vxlan.c
664     @@ -845,6 +845,9 @@ static int arp_reduce(struct net_device *dev, struct sk_buff *skb)
665    
666     neigh_release(n);
667    
668     + if (reply == NULL)
669     + goto out;
670     +
671     skb_reset_mac_header(reply);
672     __skb_pull(reply, skb_network_offset(reply));
673     reply->ip_summed = CHECKSUM_UNNECESSARY;
674     diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
675     index 36efb418c26f..70b830f6c4bf 100644
676     --- a/drivers/net/xen-netback/netback.c
677     +++ b/drivers/net/xen-netback/netback.c
678     @@ -347,8 +347,8 @@ static bool start_new_rx_buffer(int offset, unsigned long size, int head)
679     * into multiple copies tend to give large frags their
680     * own buffers as before.
681     */
682     - if ((offset + size > MAX_BUFFER_OFFSET) &&
683     - (size <= MAX_BUFFER_OFFSET) && offset && !head)
684     + BUG_ON(size > MAX_BUFFER_OFFSET);
685     + if ((offset + size > MAX_BUFFER_OFFSET) && offset && !head)
686     return true;
687    
688     return false;
689     diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
690     index d6a518ce4d6d..c7fdabd0e5d3 100644
691     --- a/drivers/vhost/net.c
692     +++ b/drivers/vhost/net.c
693     @@ -513,9 +513,13 @@ static int get_rx_bufs(struct vhost_virtqueue *vq,
694     r = -ENOBUFS;
695     goto err;
696     }
697     - d = vhost_get_vq_desc(vq->dev, vq, vq->iov + seg,
698     + r = vhost_get_vq_desc(vq->dev, vq, vq->iov + seg,
699     ARRAY_SIZE(vq->iov) - seg, &out,
700     &in, log, log_num);
701     + if (unlikely(r < 0))
702     + goto err;
703     +
704     + d = r;
705     if (d == vq->num) {
706     r = 0;
707     goto err;
708     @@ -540,6 +544,12 @@ static int get_rx_bufs(struct vhost_virtqueue *vq,
709     *iovcount = seg;
710     if (unlikely(log))
711     *log_num = nlogs;
712     +
713     + /* Detect overrun */
714     + if (unlikely(datalen > 0)) {
715     + r = UIO_MAXIOV + 1;
716     + goto err;
717     + }
718     return headcount;
719     err:
720     vhost_discard_vq_desc(vq, headcount);
721     @@ -595,6 +605,14 @@ static void handle_rx(struct vhost_net *net)
722     /* On error, stop handling until the next kick. */
723     if (unlikely(headcount < 0))
724     break;
725     + /* On overrun, truncate and discard */
726     + if (unlikely(headcount > UIO_MAXIOV)) {
727     + msg.msg_iovlen = 1;
728     + err = sock->ops->recvmsg(NULL, sock, &msg,
729     + 1, MSG_DONTWAIT | MSG_TRUNC);
730     + pr_debug("Discarded rx packet: len %zd\n", sock_len);
731     + continue;
732     + }
733     /* OK, now we need to know about added descriptors. */
734     if (!headcount) {
735     if (unlikely(vhost_enable_notify(&net->dev, vq))) {
736     diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
737     index 037d36ae63e5..1a81b7470bc4 100644
738     --- a/include/linux/cpufreq.h
739     +++ b/include/linux/cpufreq.h
740     @@ -107,6 +107,7 @@ struct cpufreq_policy {
741     unsigned int policy; /* see above */
742     struct cpufreq_governor *governor; /* see below */
743     void *governor_data;
744     + bool governor_enabled; /* governor start/stop flag */
745    
746     struct work_struct update; /* if update_policy() needs to be
747     * called, but you're in IRQ context */
748     diff --git a/include/linux/futex.h b/include/linux/futex.h
749     index b0d95cac826e..6435f46d6e13 100644
750     --- a/include/linux/futex.h
751     +++ b/include/linux/futex.h
752     @@ -55,7 +55,11 @@ union futex_key {
753     #ifdef CONFIG_FUTEX
754     extern void exit_robust_list(struct task_struct *curr);
755     extern void exit_pi_state_list(struct task_struct *curr);
756     +#ifdef CONFIG_HAVE_FUTEX_CMPXCHG
757     +#define futex_cmpxchg_enabled 1
758     +#else
759     extern int futex_cmpxchg_enabled;
760     +#endif
761     #else
762     static inline void exit_robust_list(struct task_struct *curr)
763     {
764     diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
765     index f18d64129f99..123b21bef1b4 100644
766     --- a/include/linux/usb/usbnet.h
767     +++ b/include/linux/usb/usbnet.h
768     @@ -30,7 +30,7 @@ struct usbnet {
769     struct driver_info *driver_info;
770     const char *driver_name;
771     void *driver_priv;
772     - wait_queue_head_t *wait;
773     + wait_queue_head_t wait;
774     struct mutex phy_mutex;
775     unsigned char suspend_count;
776     unsigned char pkt_cnt, pkt_err;
777     diff --git a/include/net/sock.h b/include/net/sock.h
778     index cec4c723db9a..8f32b779bc83 100644
779     --- a/include/net/sock.h
780     +++ b/include/net/sock.h
781     @@ -1437,6 +1437,11 @@ static inline void sk_wmem_free_skb(struct sock *sk, struct sk_buff *skb)
782     */
783     #define sock_owned_by_user(sk) ((sk)->sk_lock.owned)
784    
785     +static inline void sock_release_ownership(struct sock *sk)
786     +{
787     + sk->sk_lock.owned = 0;
788     +}
789     +
790     /*
791     * Macro so as to not evaluate some arguments when
792     * lockdep is not enabled.
793     diff --git a/init/Kconfig b/init/Kconfig
794     index 2d9b83104dcf..5d6febaea56d 100644
795     --- a/init/Kconfig
796     +++ b/init/Kconfig
797     @@ -1365,6 +1365,13 @@ config FUTEX
798     support for "fast userspace mutexes". The resulting kernel may not
799     run glibc-based applications correctly.
800    
801     +config HAVE_FUTEX_CMPXCHG
802     + bool
803     + help
804     + Architectures should select this if futex_atomic_cmpxchg_inatomic()
805     + is implemented and always working. This removes a couple of runtime
806     + checks.
807     +
808     config EPOLL
809     bool "Enable eventpoll support" if EXPERT
810     default y
811     diff --git a/kernel/futex.c b/kernel/futex.c
812     index a283b3041072..3bc18bf48d0c 100644
813     --- a/kernel/futex.c
814     +++ b/kernel/futex.c
815     @@ -67,7 +67,9 @@
816    
817     #include "rtmutex_common.h"
818    
819     +#ifndef CONFIG_HAVE_FUTEX_CMPXCHG
820     int __read_mostly futex_cmpxchg_enabled;
821     +#endif
822    
823     #define FUTEX_HASHBITS (CONFIG_BASE_SMALL ? 4 : 8)
824    
825     @@ -2729,10 +2731,10 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
826     return do_futex(uaddr, op, val, tp, uaddr2, val2, val3);
827     }
828    
829     -static int __init futex_init(void)
830     +static void __init futex_detect_cmpxchg(void)
831     {
832     +#ifndef CONFIG_HAVE_FUTEX_CMPXCHG
833     u32 curval;
834     - int i;
835    
836     /*
837     * This will fail and we want it. Some arch implementations do
838     @@ -2746,6 +2748,14 @@ static int __init futex_init(void)
839     */
840     if (cmpxchg_futex_value_locked(&curval, NULL, 0, 0) == -EFAULT)
841     futex_cmpxchg_enabled = 1;
842     +#endif
843     +}
844     +
845     +static int __init futex_init(void)
846     +{
847     + int i;
848     +
849     + futex_detect_cmpxchg();
850    
851     for (i = 0; i < ARRAY_SIZE(futex_queues); i++) {
852     plist_head_init(&futex_queues[i].chain);
853     diff --git a/lib/nlattr.c b/lib/nlattr.c
854     index 18eca7809b08..fc6754720ced 100644
855     --- a/lib/nlattr.c
856     +++ b/lib/nlattr.c
857     @@ -303,9 +303,15 @@ int nla_memcmp(const struct nlattr *nla, const void *data,
858     */
859     int nla_strcmp(const struct nlattr *nla, const char *str)
860     {
861     - int len = strlen(str) + 1;
862     - int d = nla_len(nla) - len;
863     + int len = strlen(str);
864     + char *buf = nla_data(nla);
865     + int attrlen = nla_len(nla);
866     + int d;
867    
868     + if (attrlen > 0 && buf[attrlen - 1] == '\0')
869     + attrlen--;
870     +
871     + d = attrlen - len;
872     if (d == 0)
873     d = memcmp(nla_data(nla), str, len);
874    
875     diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
876     index 9424f3718ea7..86abb2e59aea 100644
877     --- a/net/8021q/vlan.c
878     +++ b/net/8021q/vlan.c
879     @@ -305,9 +305,11 @@ static void vlan_sync_address(struct net_device *dev,
880     static void vlan_transfer_features(struct net_device *dev,
881     struct net_device *vlandev)
882     {
883     + struct vlan_dev_priv *vlan = vlan_dev_priv(vlandev);
884     +
885     vlandev->gso_max_size = dev->gso_max_size;
886    
887     - if (dev->features & NETIF_F_HW_VLAN_CTAG_TX)
888     + if (vlan_hw_offload_capable(dev->features, vlan->vlan_proto))
889     vlandev->hard_header_len = dev->hard_header_len;
890     else
891     vlandev->hard_header_len = dev->hard_header_len + VLAN_HLEN;
892     diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
893     index 4af64afc7022..cf35f383db4c 100644
894     --- a/net/8021q/vlan_dev.c
895     +++ b/net/8021q/vlan_dev.c
896     @@ -557,6 +557,9 @@ static int vlan_passthru_hard_header(struct sk_buff *skb, struct net_device *dev
897     struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
898     struct net_device *real_dev = vlan->real_dev;
899    
900     + if (saddr == NULL)
901     + saddr = dev->dev_addr;
902     +
903     return dev_hard_header(skb, real_dev, type, daddr, saddr, len);
904     }
905    
906     @@ -608,7 +611,8 @@ static int vlan_dev_init(struct net_device *dev)
907     #endif
908    
909     dev->needed_headroom = real_dev->needed_headroom;
910     - if (real_dev->features & NETIF_F_HW_VLAN_CTAG_TX) {
911     + if (vlan_hw_offload_capable(real_dev->features,
912     + vlan_dev_priv(dev)->vlan_proto)) {
913     dev->header_ops = &vlan_passthru_header_ops;
914     dev->hard_header_len = real_dev->hard_header_len;
915     } else {
916     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
917     index 2a180a380181..81de0106528b 100644
918     --- a/net/bridge/br_multicast.c
919     +++ b/net/bridge/br_multicast.c
920     @@ -1176,6 +1176,12 @@ static int br_ip6_multicast_query(struct net_bridge *br,
921    
922     br_multicast_query_received(br, port, !ipv6_addr_any(&ip6h->saddr));
923    
924     + /* RFC2710+RFC3810 (MLDv1+MLDv2) require link-local source addresses */
925     + if (!(ipv6_addr_type(&ip6h->saddr) & IPV6_ADDR_LINKLOCAL)) {
926     + err = -EINVAL;
927     + goto out;
928     + }
929     +
930     if (skb->len == sizeof(*mld)) {
931     if (!pskb_may_pull(skb, sizeof(*mld))) {
932     err = -EINVAL;
933     diff --git a/net/core/netpoll.c b/net/core/netpoll.c
934     index 433a1051d323..e861438d5454 100644
935     --- a/net/core/netpoll.c
936     +++ b/net/core/netpoll.c
937     @@ -745,7 +745,7 @@ static bool pkt_is_ns(struct sk_buff *skb)
938     struct nd_msg *msg;
939     struct ipv6hdr *hdr;
940    
941     - if (skb->protocol != htons(ETH_P_ARP))
942     + if (skb->protocol != htons(ETH_P_IPV6))
943     return false;
944     if (!pskb_may_pull(skb, sizeof(struct ipv6hdr) + sizeof(struct nd_msg)))
945     return false;
946     diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
947     index fd01eca52a13..4c3087dffe78 100644
948     --- a/net/core/rtnetlink.c
949     +++ b/net/core/rtnetlink.c
950     @@ -1973,12 +1973,13 @@ EXPORT_SYMBOL(rtmsg_ifinfo);
951     static int nlmsg_populate_fdb_fill(struct sk_buff *skb,
952     struct net_device *dev,
953     u8 *addr, u32 pid, u32 seq,
954     - int type, unsigned int flags)
955     + int type, unsigned int flags,
956     + int nlflags)
957     {
958     struct nlmsghdr *nlh;
959     struct ndmsg *ndm;
960    
961     - nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), NLM_F_MULTI);
962     + nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), nlflags);
963     if (!nlh)
964     return -EMSGSIZE;
965    
966     @@ -2016,7 +2017,7 @@ static void rtnl_fdb_notify(struct net_device *dev, u8 *addr, int type)
967     if (!skb)
968     goto errout;
969    
970     - err = nlmsg_populate_fdb_fill(skb, dev, addr, 0, 0, type, NTF_SELF);
971     + err = nlmsg_populate_fdb_fill(skb, dev, addr, 0, 0, type, NTF_SELF, 0);
972     if (err < 0) {
973     kfree_skb(skb);
974     goto errout;
975     @@ -2249,7 +2250,8 @@ static int nlmsg_populate_fdb(struct sk_buff *skb,
976    
977     err = nlmsg_populate_fdb_fill(skb, dev, ha->addr,
978     portid, seq,
979     - RTM_NEWNEIGH, NTF_SELF);
980     + RTM_NEWNEIGH, NTF_SELF,
981     + NLM_F_MULTI);
982     if (err < 0)
983     return err;
984     skip:
985     diff --git a/net/core/sock.c b/net/core/sock.c
986     index 3ba527074f7f..d743099250f4 100644
987     --- a/net/core/sock.c
988     +++ b/net/core/sock.c
989     @@ -2309,10 +2309,13 @@ void release_sock(struct sock *sk)
990     if (sk->sk_backlog.tail)
991     __release_sock(sk);
992    
993     + /* Warning : release_cb() might need to release sk ownership,
994     + * ie call sock_release_ownership(sk) before us.
995     + */
996     if (sk->sk_prot->release_cb)
997     sk->sk_prot->release_cb(sk);
998    
999     - sk->sk_lock.owned = 0;
1000     + sock_release_ownership(sk);
1001     if (waitqueue_active(&sk->sk_lock.wq))
1002     wake_up(&sk->sk_lock.wq);
1003     spin_unlock_bh(&sk->sk_lock.slock);
1004     diff --git a/net/ipv4/inet_fragment.c b/net/ipv4/inet_fragment.c
1005     index 7e06641e36ae..af02a39175e3 100644
1006     --- a/net/ipv4/inet_fragment.c
1007     +++ b/net/ipv4/inet_fragment.c
1008     @@ -211,7 +211,7 @@ int inet_frag_evictor(struct netns_frags *nf, struct inet_frags *f, bool force)
1009     }
1010    
1011     work = frag_mem_limit(nf) - nf->low_thresh;
1012     - while (work > 0) {
1013     + while (work > 0 || force) {
1014     spin_lock(&nf->lru_lock);
1015    
1016     if (list_empty(&nf->lru_list)) {
1017     @@ -283,9 +283,10 @@ static struct inet_frag_queue *inet_frag_intern(struct netns_frags *nf,
1018    
1019     atomic_inc(&qp->refcnt);
1020     hlist_add_head(&qp->list, &hb->chain);
1021     + inet_frag_lru_add(nf, qp);
1022     spin_unlock(&hb->chain_lock);
1023     read_unlock(&f->lock);
1024     - inet_frag_lru_add(nf, qp);
1025     +
1026     return qp;
1027     }
1028    
1029     diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
1030     index 7dbad6835843..49797ed0917c 100644
1031     --- a/net/ipv4/ipmr.c
1032     +++ b/net/ipv4/ipmr.c
1033     @@ -2255,13 +2255,14 @@ int ipmr_get_route(struct net *net, struct sk_buff *skb,
1034     }
1035    
1036     static int ipmr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
1037     - u32 portid, u32 seq, struct mfc_cache *c, int cmd)
1038     + u32 portid, u32 seq, struct mfc_cache *c, int cmd,
1039     + int flags)
1040     {
1041     struct nlmsghdr *nlh;
1042     struct rtmsg *rtm;
1043     int err;
1044    
1045     - nlh = nlmsg_put(skb, portid, seq, cmd, sizeof(*rtm), NLM_F_MULTI);
1046     + nlh = nlmsg_put(skb, portid, seq, cmd, sizeof(*rtm), flags);
1047     if (nlh == NULL)
1048     return -EMSGSIZE;
1049    
1050     @@ -2329,7 +2330,7 @@ static void mroute_netlink_event(struct mr_table *mrt, struct mfc_cache *mfc,
1051     if (skb == NULL)
1052     goto errout;
1053    
1054     - err = ipmr_fill_mroute(mrt, skb, 0, 0, mfc, cmd);
1055     + err = ipmr_fill_mroute(mrt, skb, 0, 0, mfc, cmd, 0);
1056     if (err < 0)
1057     goto errout;
1058    
1059     @@ -2368,7 +2369,8 @@ static int ipmr_rtm_dumproute(struct sk_buff *skb, struct netlink_callback *cb)
1060     if (ipmr_fill_mroute(mrt, skb,
1061     NETLINK_CB(cb->skb).portid,
1062     cb->nlh->nlmsg_seq,
1063     - mfc, RTM_NEWROUTE) < 0)
1064     + mfc, RTM_NEWROUTE,
1065     + NLM_F_MULTI) < 0)
1066     goto done;
1067     next_entry:
1068     e++;
1069     @@ -2382,7 +2384,8 @@ next_entry:
1070     if (ipmr_fill_mroute(mrt, skb,
1071     NETLINK_CB(cb->skb).portid,
1072     cb->nlh->nlmsg_seq,
1073     - mfc, RTM_NEWROUTE) < 0) {
1074     + mfc, RTM_NEWROUTE,
1075     + NLM_F_MULTI) < 0) {
1076     spin_unlock_bh(&mfc_unres_lock);
1077     goto done;
1078     }
1079     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
1080     index 6da3d94a114b..4a4e8746d1b2 100644
1081     --- a/net/ipv4/tcp_output.c
1082     +++ b/net/ipv4/tcp_output.c
1083     @@ -755,6 +755,17 @@ void tcp_release_cb(struct sock *sk)
1084     if (flags & (1UL << TCP_TSQ_DEFERRED))
1085     tcp_tsq_handler(sk);
1086    
1087     + /* Here begins the tricky part :
1088     + * We are called from release_sock() with :
1089     + * 1) BH disabled
1090     + * 2) sk_lock.slock spinlock held
1091     + * 3) socket owned by us (sk->sk_lock.owned == 1)
1092     + *
1093     + * But following code is meant to be called from BH handlers,
1094     + * so we should keep BH disabled, but early release socket ownership
1095     + */
1096     + sock_release_ownership(sk);
1097     +
1098     if (flags & (1UL << TCP_WRITE_TIMER_DEFERRED)) {
1099     tcp_write_timer_handler(sk);
1100     __sock_put(sk);
1101     diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
1102     index b78a3ee93d52..7bcdd0df68db 100644
1103     --- a/net/ipv6/addrconf.c
1104     +++ b/net/ipv6/addrconf.c
1105     @@ -1111,8 +1111,11 @@ retry:
1106     * Lifetime is greater than REGEN_ADVANCE time units. In particular,
1107     * an implementation must not create a temporary address with a zero
1108     * Preferred Lifetime.
1109     + * Use age calculation as in addrconf_verify to avoid unnecessary
1110     + * temporary addresses being generated.
1111     */
1112     - if (tmp_prefered_lft <= regen_advance) {
1113     + age = (now - tmp_tstamp + ADDRCONF_TIMER_FUZZ_MINUS) / HZ;
1114     + if (tmp_prefered_lft <= regen_advance + age) {
1115     in6_ifa_put(ifp);
1116     in6_dev_put(idev);
1117     ret = -1;
1118     diff --git a/net/ipv6/exthdrs_offload.c b/net/ipv6/exthdrs_offload.c
1119     index cf77f3abfd06..447a7fbd1bb6 100644
1120     --- a/net/ipv6/exthdrs_offload.c
1121     +++ b/net/ipv6/exthdrs_offload.c
1122     @@ -25,11 +25,11 @@ int __init ipv6_exthdrs_offload_init(void)
1123     int ret;
1124    
1125     ret = inet6_add_offload(&rthdr_offload, IPPROTO_ROUTING);
1126     - if (!ret)
1127     + if (ret)
1128     goto out;
1129    
1130     ret = inet6_add_offload(&dstopt_offload, IPPROTO_DSTOPTS);
1131     - if (!ret)
1132     + if (ret)
1133     goto out_rt;
1134    
1135     out:
1136     diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
1137     index 70e704d49007..2dee1d9d7305 100644
1138     --- a/net/ipv6/icmp.c
1139     +++ b/net/ipv6/icmp.c
1140     @@ -508,7 +508,7 @@ static void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info)
1141     np->tclass, NULL, &fl6, (struct rt6_info *)dst,
1142     MSG_DONTWAIT, np->dontfrag);
1143     if (err) {
1144     - ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTERRORS);
1145     + ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTERRORS);
1146     ip6_flush_pending_frames(sk);
1147     } else {
1148     err = icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr,
1149     diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
1150     index 98a262b759ae..32fb114b86bb 100644
1151     --- a/net/ipv6/ip6_output.c
1152     +++ b/net/ipv6/ip6_output.c
1153     @@ -1108,21 +1108,19 @@ static void ip6_append_data_mtu(unsigned int *mtu,
1154     unsigned int fragheaderlen,
1155     struct sk_buff *skb,
1156     struct rt6_info *rt,
1157     - bool pmtuprobe)
1158     + unsigned int orig_mtu)
1159     {
1160     if (!(rt->dst.flags & DST_XFRM_TUNNEL)) {
1161     if (skb == NULL) {
1162     /* first fragment, reserve header_len */
1163     - *mtu = *mtu - rt->dst.header_len;
1164     + *mtu = orig_mtu - rt->dst.header_len;
1165    
1166     } else {
1167     /*
1168     * this fragment is not first, the headers
1169     * space is regarded as data space.
1170     */
1171     - *mtu = min(*mtu, pmtuprobe ?
1172     - rt->dst.dev->mtu :
1173     - dst_mtu(rt->dst.path));
1174     + *mtu = orig_mtu;
1175     }
1176     *maxfraglen = ((*mtu - fragheaderlen) & ~7)
1177     + fragheaderlen - sizeof(struct frag_hdr);
1178     @@ -1139,7 +1137,7 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
1179     struct ipv6_pinfo *np = inet6_sk(sk);
1180     struct inet_cork *cork;
1181     struct sk_buff *skb, *skb_prev = NULL;
1182     - unsigned int maxfraglen, fragheaderlen, mtu;
1183     + unsigned int maxfraglen, fragheaderlen, mtu, orig_mtu;
1184     int exthdrlen;
1185     int dst_exthdrlen;
1186     int hh_len;
1187     @@ -1221,6 +1219,7 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
1188     dst_exthdrlen = 0;
1189     mtu = cork->fragsize;
1190     }
1191     + orig_mtu = mtu;
1192    
1193     hh_len = LL_RESERVED_SPACE(rt->dst.dev);
1194    
1195     @@ -1300,8 +1299,7 @@ alloc_new_skb:
1196     if (skb == NULL || skb_prev == NULL)
1197     ip6_append_data_mtu(&mtu, &maxfraglen,
1198     fragheaderlen, skb, rt,
1199     - np->pmtudisc ==
1200     - IPV6_PMTUDISC_PROBE);
1201     + orig_mtu);
1202    
1203     skb_prev = skb;
1204    
1205     @@ -1556,8 +1554,8 @@ int ip6_push_pending_frames(struct sock *sk)
1206     if (proto == IPPROTO_ICMPV6) {
1207     struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
1208    
1209     - ICMP6MSGOUT_INC_STATS_BH(net, idev, icmp6_hdr(skb)->icmp6_type);
1210     - ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTMSGS);
1211     + ICMP6MSGOUT_INC_STATS(net, idev, icmp6_hdr(skb)->icmp6_type);
1212     + ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
1213     }
1214    
1215     err = ip6_local_out(skb);
1216     diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
1217     index 9f44ebc17759..2c84072b1da7 100644
1218     --- a/net/ipv6/ip6mr.c
1219     +++ b/net/ipv6/ip6mr.c
1220     @@ -2351,13 +2351,14 @@ int ip6mr_get_route(struct net *net,
1221     }
1222    
1223     static int ip6mr_fill_mroute(struct mr6_table *mrt, struct sk_buff *skb,
1224     - u32 portid, u32 seq, struct mfc6_cache *c, int cmd)
1225     + u32 portid, u32 seq, struct mfc6_cache *c, int cmd,
1226     + int flags)
1227     {
1228     struct nlmsghdr *nlh;
1229     struct rtmsg *rtm;
1230     int err;
1231    
1232     - nlh = nlmsg_put(skb, portid, seq, cmd, sizeof(*rtm), NLM_F_MULTI);
1233     + nlh = nlmsg_put(skb, portid, seq, cmd, sizeof(*rtm), flags);
1234     if (nlh == NULL)
1235     return -EMSGSIZE;
1236    
1237     @@ -2425,7 +2426,7 @@ static void mr6_netlink_event(struct mr6_table *mrt, struct mfc6_cache *mfc,
1238     if (skb == NULL)
1239     goto errout;
1240    
1241     - err = ip6mr_fill_mroute(mrt, skb, 0, 0, mfc, cmd);
1242     + err = ip6mr_fill_mroute(mrt, skb, 0, 0, mfc, cmd, 0);
1243     if (err < 0)
1244     goto errout;
1245    
1246     @@ -2464,7 +2465,8 @@ static int ip6mr_rtm_dumproute(struct sk_buff *skb, struct netlink_callback *cb)
1247     if (ip6mr_fill_mroute(mrt, skb,
1248     NETLINK_CB(cb->skb).portid,
1249     cb->nlh->nlmsg_seq,
1250     - mfc, RTM_NEWROUTE) < 0)
1251     + mfc, RTM_NEWROUTE,
1252     + NLM_F_MULTI) < 0)
1253     goto done;
1254     next_entry:
1255     e++;
1256     @@ -2478,7 +2480,8 @@ next_entry:
1257     if (ip6mr_fill_mroute(mrt, skb,
1258     NETLINK_CB(cb->skb).portid,
1259     cb->nlh->nlmsg_seq,
1260     - mfc, RTM_NEWROUTE) < 0) {
1261     + mfc, RTM_NEWROUTE,
1262     + NLM_F_MULTI) < 0) {
1263     spin_unlock_bh(&mfc_unres_lock);
1264     goto done;
1265     }
1266     diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
1267     index 952eaed38808..734aec059ffd 100644
1268     --- a/net/ipv6/mcast.c
1269     +++ b/net/ipv6/mcast.c
1270     @@ -1439,11 +1439,12 @@ static void mld_sendpack(struct sk_buff *skb)
1271     dst_output);
1272     out:
1273     if (!err) {
1274     - ICMP6MSGOUT_INC_STATS_BH(net, idev, ICMPV6_MLD2_REPORT);
1275     - ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTMSGS);
1276     - IP6_UPD_PO_STATS_BH(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
1277     - } else
1278     - IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_OUTDISCARDS);
1279     + ICMP6MSGOUT_INC_STATS(net, idev, ICMPV6_MLD2_REPORT);
1280     + ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
1281     + IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
1282     + } else {
1283     + IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
1284     + }
1285    
1286     rcu_read_unlock();
1287     return;
1288     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
1289     index 6c389300f4e9..3fde3e977862 100644
1290     --- a/net/ipv6/route.c
1291     +++ b/net/ipv6/route.c
1292     @@ -1428,7 +1428,7 @@ int ip6_route_add(struct fib6_config *cfg)
1293     if (!table)
1294     goto out;
1295    
1296     - rt = ip6_dst_alloc(net, NULL, DST_NOCOUNT, table);
1297     + rt = ip6_dst_alloc(net, NULL, (cfg->fc_flags & RTF_ADDRCONF) ? 0 : DST_NOCOUNT, table);
1298    
1299     if (!rt) {
1300     err = -ENOMEM;
1301     diff --git a/net/rds/iw.c b/net/rds/iw.c
1302     index 7826d46baa70..589935661d66 100644
1303     --- a/net/rds/iw.c
1304     +++ b/net/rds/iw.c
1305     @@ -239,7 +239,8 @@ static int rds_iw_laddr_check(__be32 addr)
1306     ret = rdma_bind_addr(cm_id, (struct sockaddr *)&sin);
1307     /* due to this, we will claim to support IB devices unless we
1308     check node_type. */
1309     - if (ret || cm_id->device->node_type != RDMA_NODE_RNIC)
1310     + if (ret || !cm_id->device ||
1311     + cm_id->device->node_type != RDMA_NODE_RNIC)
1312     ret = -EADDRNOTAVAIL;
1313    
1314     rdsdebug("addr %pI4 ret %d node type %d\n",
1315     diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c
1316     index cf579e71cff0..673921cfb97e 100644
1317     --- a/net/sctp/sm_make_chunk.c
1318     +++ b/net/sctp/sm_make_chunk.c
1319     @@ -1403,8 +1403,8 @@ static void sctp_chunk_destroy(struct sctp_chunk *chunk)
1320     BUG_ON(!list_empty(&chunk->list));
1321     list_del_init(&chunk->transmitted_list);
1322    
1323     - /* Free the chunk skb data and the SCTP_chunk stub itself. */
1324     - dev_kfree_skb(chunk->skb);
1325     + consume_skb(chunk->skb);
1326     + consume_skb(chunk->auth_chunk);
1327    
1328     SCTP_DBG_OBJCNT_DEC(chunk);
1329     kmem_cache_free(sctp_chunk_cachep, chunk);
1330     diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
1331     index 7ceb25ba85b8..9973079401c4 100644
1332     --- a/net/sctp/sm_statefuns.c
1333     +++ b/net/sctp/sm_statefuns.c
1334     @@ -767,7 +767,6 @@ sctp_disposition_t sctp_sf_do_5_1D_ce(struct net *net,
1335    
1336     /* Make sure that we and the peer are AUTH capable */
1337     if (!net->sctp.auth_enable || !new_asoc->peer.auth_capable) {
1338     - kfree_skb(chunk->auth_chunk);
1339     sctp_association_free(new_asoc);
1340     return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1341     }
1342     @@ -782,10 +781,6 @@ sctp_disposition_t sctp_sf_do_5_1D_ce(struct net *net,
1343     auth.transport = chunk->transport;
1344    
1345     ret = sctp_sf_authenticate(net, ep, new_asoc, type, &auth);
1346     -
1347     - /* We can now safely free the auth_chunk clone */
1348     - kfree_skb(chunk->auth_chunk);
1349     -
1350     if (ret != SCTP_IERROR_NO_ERROR) {
1351     sctp_association_free(new_asoc);
1352     return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
1353     diff --git a/net/socket.c b/net/socket.c
1354     index ac72efc3d965..fc90b4f0da3c 100644
1355     --- a/net/socket.c
1356     +++ b/net/socket.c
1357     @@ -1964,6 +1964,10 @@ static int copy_msghdr_from_user(struct msghdr *kmsg,
1358     {
1359     if (copy_from_user(kmsg, umsg, sizeof(struct msghdr)))
1360     return -EFAULT;
1361     +
1362     + if (kmsg->msg_namelen < 0)
1363     + return -EINVAL;
1364     +
1365     if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
1366     kmsg->msg_namelen = sizeof(struct sockaddr_storage);
1367     return 0;
1368     diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
1369     index 94d334781554..75e198d029d2 100644
1370     --- a/net/unix/af_unix.c
1371     +++ b/net/unix/af_unix.c
1372     @@ -1792,8 +1792,11 @@ static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock,
1373     goto out;
1374    
1375     err = mutex_lock_interruptible(&u->readlock);
1376     - if (err) {
1377     - err = sock_intr_errno(sock_rcvtimeo(sk, noblock));
1378     + if (unlikely(err)) {
1379     + /* recvmsg() in non blocking mode is supposed to return -EAGAIN
1380     + * sk_rcvtimeo is not honored by mutex_lock_interruptible()
1381     + */
1382     + err = noblock ? -EAGAIN : -ERESTARTSYS;
1383     goto out;
1384     }
1385    
1386     @@ -1913,6 +1916,7 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
1387     struct unix_sock *u = unix_sk(sk);
1388     struct sockaddr_un *sunaddr = msg->msg_name;
1389     int copied = 0;
1390     + int noblock = flags & MSG_DONTWAIT;
1391     int check_creds = 0;
1392     int target;
1393     int err = 0;
1394     @@ -1928,7 +1932,7 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
1395     goto out;
1396    
1397     target = sock_rcvlowat(sk, flags&MSG_WAITALL, size);
1398     - timeo = sock_rcvtimeo(sk, flags&MSG_DONTWAIT);
1399     + timeo = sock_rcvtimeo(sk, noblock);
1400    
1401     /* Lock the socket to prevent queue disordering
1402     * while sleeps in memcpy_tomsg
1403     @@ -1940,8 +1944,11 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
1404     }
1405    
1406     err = mutex_lock_interruptible(&u->readlock);
1407     - if (err) {
1408     - err = sock_intr_errno(timeo);
1409     + if (unlikely(err)) {
1410     + /* recvmsg() in non blocking mode is supposed to return -EAGAIN
1411     + * sk_rcvtimeo is not honored by mutex_lock_interruptible()
1412     + */
1413     + err = noblock ? -EAGAIN : -ERESTARTSYS;
1414     goto out;
1415     }
1416    
1417     diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst
1418     index 182084d728c8..8ccf83056a7a 100644
1419     --- a/scripts/Makefile.headersinst
1420     +++ b/scripts/Makefile.headersinst
1421     @@ -47,18 +47,24 @@ header-y := $(filter-out $(generic-y), $(header-y))
1422     all-files := $(header-y) $(genhdr-y) $(wrapper-files)
1423     output-files := $(addprefix $(installdir)/, $(all-files))
1424    
1425     -input-files := $(foreach hdr, $(header-y), \
1426     +input-files1 := $(foreach hdr, $(header-y), \
1427     $(if $(wildcard $(srcdir)/$(hdr)), \
1428     - $(wildcard $(srcdir)/$(hdr)), \
1429     + $(wildcard $(srcdir)/$(hdr))) \
1430     + )
1431     +input-files1-name := $(notdir $(input-files1))
1432     +input-files2 := $(foreach hdr, $(header-y), \
1433     + $(if $(wildcard $(srcdir)/$(hdr)),, \
1434     $(if $(wildcard $(oldsrcdir)/$(hdr)), \
1435     $(wildcard $(oldsrcdir)/$(hdr)), \
1436     $(error Missing UAPI file $(srcdir)/$(hdr))) \
1437     - )) \
1438     - $(foreach hdr, $(genhdr-y), \
1439     + ))
1440     +input-files2-name := $(notdir $(input-files2))
1441     +input-files3 := $(foreach hdr, $(genhdr-y), \
1442     $(if $(wildcard $(gendir)/$(hdr)), \
1443     $(wildcard $(gendir)/$(hdr)), \
1444     $(error Missing generated UAPI file $(gendir)/$(hdr)) \
1445     ))
1446     +input-files3-name := $(notdir $(input-files3))
1447    
1448     # Work out what needs to be removed
1449     oldheaders := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h))
1450     @@ -72,7 +78,9 @@ printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@))
1451     quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
1452     file$(if $(word 2, $(all-files)),s))
1453     cmd_install = \
1454     - $(CONFIG_SHELL) $< $(installdir) $(input-files); \
1455     + $(CONFIG_SHELL) $< $(installdir) $(srcdir) $(input-files1-name); \
1456     + $(CONFIG_SHELL) $< $(installdir) $(oldsrcdir) $(input-files2-name); \
1457     + $(CONFIG_SHELL) $< $(installdir) $(gendir) $(input-files3-name); \
1458     for F in $(wrapper-files); do \
1459     echo "\#include <asm-generic/$$F>" > $(installdir)/$$F; \
1460     done; \
1461     @@ -98,7 +106,7 @@ __headersinst: $(subdirs) $(install-file)
1462     @:
1463    
1464     targets += $(install-file)
1465     -$(install-file): scripts/headers_install.sh $(input-files) FORCE
1466     +$(install-file): scripts/headers_install.sh $(input-files1) $(input-files2) $(input-files3) FORCE
1467     $(if $(unwanted),$(call cmd,remove),)
1468     $(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@)))
1469     $(call if_changed,install)
1470     diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh
1471     index 643764f53ea7..5de5660cb708 100644
1472     --- a/scripts/headers_install.sh
1473     +++ b/scripts/headers_install.sh
1474     @@ -2,7 +2,7 @@
1475    
1476     if [ $# -lt 1 ]
1477     then
1478     - echo "Usage: headers_install.sh OUTDIR [FILES...]
1479     + echo "Usage: headers_install.sh OUTDIR SRCDIR [FILES...]
1480     echo
1481     echo "Prepares kernel header files for use by user space, by removing"
1482     echo "all compiler.h definitions and #includes, removing any"
1483     @@ -10,6 +10,7 @@ then
1484     echo "asm/inline/volatile keywords."
1485     echo
1486     echo "OUTDIR: directory to write each userspace header FILE to."
1487     + echo "SRCDIR: source directory where files are picked."
1488     echo "FILES: list of header files to operate on."
1489    
1490     exit 1
1491     @@ -19,6 +20,8 @@ fi
1492    
1493     OUTDIR="$1"
1494     shift
1495     +SRCDIR="$1"
1496     +shift
1497    
1498     # Iterate through files listed on command line
1499    
1500     @@ -34,7 +37,7 @@ do
1501     -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \
1502     -e 's/(^|[ \t(])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \
1503     -e 's@#(ifndef|define|endif[ \t]*/[*])[ \t]*_UAPI@#\1 @' \
1504     - "$i" > "$OUTDIR/$FILE.sed" || exit 1
1505     + "$SRCDIR/$i" > "$OUTDIR/$FILE.sed" || exit 1
1506     scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$FILE.sed" \
1507     > "$OUTDIR/$FILE"
1508     [ $? -gt 1 ] && exit 1
1509     diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
1510     index a7096e130c04..70d4a8a7f21c 100644
1511     --- a/security/selinux/hooks.c
1512     +++ b/security/selinux/hooks.c
1513     @@ -1361,15 +1361,33 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
1514     isec->sid = sbsec->sid;
1515    
1516     if ((sbsec->flags & SE_SBPROC) && !S_ISLNK(inode->i_mode)) {
1517     - if (opt_dentry) {
1518     - isec->sclass = inode_mode_to_security_class(inode->i_mode);
1519     - rc = selinux_proc_get_sid(opt_dentry,
1520     - isec->sclass,
1521     - &sid);
1522     - if (rc)
1523     - goto out_unlock;
1524     - isec->sid = sid;
1525     - }
1526     + /* We must have a dentry to determine the label on
1527     + * procfs inodes */
1528     + if (opt_dentry)
1529     + /* Called from d_instantiate or
1530     + * d_splice_alias. */
1531     + dentry = dget(opt_dentry);
1532     + else
1533     + /* Called from selinux_complete_init, try to
1534     + * find a dentry. */
1535     + dentry = d_find_alias(inode);
1536     + /*
1537     + * This can be hit on boot when a file is accessed
1538     + * before the policy is loaded. When we load policy we
1539     + * may find inodes that have no dentry on the
1540     + * sbsec->isec_head list. No reason to complain as
1541     + * these will get fixed up the next time we go through
1542     + * inode_doinit() with a dentry, before these inodes
1543     + * could be used again by userspace.
1544     + */
1545     + if (!dentry)
1546     + goto out_unlock;
1547     + isec->sclass = inode_mode_to_security_class(inode->i_mode);
1548     + rc = selinux_proc_get_sid(dentry, isec->sclass, &sid);
1549     + dput(dentry);
1550     + if (rc)
1551     + goto out_unlock;
1552     + isec->sid = sid;
1553     }
1554     break;
1555     }