Contents of /trunk/kernel-alx/patches-4.9/0239-4.9.140-all-fixes.patch
Parent Directory | Revision Log
Revision 3292 -
(show annotations)
(download)
Tue Mar 12 10:43:03 2019 UTC (5 years, 6 months ago) by niro
File size: 5874 byte(s)
Tue Mar 12 10:43:03 2019 UTC (5 years, 6 months ago) by niro
File size: 5874 byte(s)
-linux-4.9.140
1 | diff --git a/Makefile b/Makefile |
2 | index a6959d96316d..a9aed2326233 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 4 |
7 | PATCHLEVEL = 9 |
8 | -SUBLEVEL = 139 |
9 | +SUBLEVEL = 140 |
10 | EXTRAVERSION = |
11 | NAME = Roaring Lionus |
12 | |
13 | diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c |
14 | index 647a702c29dc..6221166e3fca 100644 |
15 | --- a/arch/x86/kernel/cpu/bugs.c |
16 | +++ b/arch/x86/kernel/cpu/bugs.c |
17 | @@ -33,10 +33,12 @@ static void __init spectre_v2_select_mitigation(void); |
18 | static void __init ssb_select_mitigation(void); |
19 | static void __init l1tf_select_mitigation(void); |
20 | |
21 | -/* The base value of the SPEC_CTRL MSR that always has to be preserved. */ |
22 | -u64 x86_spec_ctrl_base; |
23 | +/* |
24 | + * Our boot-time value of the SPEC_CTRL MSR. We read it once so that any |
25 | + * writes to SPEC_CTRL contain whatever reserved bits have been set. |
26 | + */ |
27 | +u64 __ro_after_init x86_spec_ctrl_base; |
28 | EXPORT_SYMBOL_GPL(x86_spec_ctrl_base); |
29 | -static DEFINE_MUTEX(spec_ctrl_mutex); |
30 | |
31 | /* |
32 | * The vendor and possibly platform specific bits which can be modified in |
33 | @@ -320,46 +322,6 @@ static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void) |
34 | return cmd; |
35 | } |
36 | |
37 | -static bool stibp_needed(void) |
38 | -{ |
39 | - if (spectre_v2_enabled == SPECTRE_V2_NONE) |
40 | - return false; |
41 | - |
42 | - if (!boot_cpu_has(X86_FEATURE_STIBP)) |
43 | - return false; |
44 | - |
45 | - return true; |
46 | -} |
47 | - |
48 | -static void update_stibp_msr(void *info) |
49 | -{ |
50 | - wrmsrl(MSR_IA32_SPEC_CTRL, x86_spec_ctrl_base); |
51 | -} |
52 | - |
53 | -void arch_smt_update(void) |
54 | -{ |
55 | - u64 mask; |
56 | - |
57 | - if (!stibp_needed()) |
58 | - return; |
59 | - |
60 | - mutex_lock(&spec_ctrl_mutex); |
61 | - mask = x86_spec_ctrl_base; |
62 | - if (cpu_smt_control == CPU_SMT_ENABLED) |
63 | - mask |= SPEC_CTRL_STIBP; |
64 | - else |
65 | - mask &= ~SPEC_CTRL_STIBP; |
66 | - |
67 | - if (mask != x86_spec_ctrl_base) { |
68 | - pr_info("Spectre v2 cross-process SMT mitigation: %s STIBP\n", |
69 | - cpu_smt_control == CPU_SMT_ENABLED ? |
70 | - "Enabling" : "Disabling"); |
71 | - x86_spec_ctrl_base = mask; |
72 | - on_each_cpu(update_stibp_msr, NULL, 1); |
73 | - } |
74 | - mutex_unlock(&spec_ctrl_mutex); |
75 | -} |
76 | - |
77 | static void __init spectre_v2_select_mitigation(void) |
78 | { |
79 | enum spectre_v2_mitigation_cmd cmd = spectre_v2_parse_cmdline(); |
80 | @@ -459,9 +421,6 @@ specv2_set_mode: |
81 | setup_force_cpu_cap(X86_FEATURE_USE_IBRS_FW); |
82 | pr_info("Enabling Restricted Speculation for firmware calls\n"); |
83 | } |
84 | - |
85 | - /* Enable STIBP if appropriate */ |
86 | - arch_smt_update(); |
87 | } |
88 | |
89 | #undef pr_fmt |
90 | @@ -854,8 +813,6 @@ static ssize_t l1tf_show_state(char *buf) |
91 | static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr, |
92 | char *buf, unsigned int bug) |
93 | { |
94 | - int ret; |
95 | - |
96 | if (!boot_cpu_has_bug(bug)) |
97 | return sprintf(buf, "Not affected\n"); |
98 | |
99 | @@ -870,12 +827,10 @@ static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr |
100 | return sprintf(buf, "Mitigation: __user pointer sanitization\n"); |
101 | |
102 | case X86_BUG_SPECTRE_V2: |
103 | - ret = sprintf(buf, "%s%s%s%s%s\n", spectre_v2_strings[spectre_v2_enabled], |
104 | + return sprintf(buf, "%s%s%s%s\n", spectre_v2_strings[spectre_v2_enabled], |
105 | boot_cpu_has(X86_FEATURE_USE_IBPB) ? ", IBPB" : "", |
106 | boot_cpu_has(X86_FEATURE_USE_IBRS_FW) ? ", IBRS_FW" : "", |
107 | - (x86_spec_ctrl_base & SPEC_CTRL_STIBP) ? ", STIBP" : "", |
108 | spectre_v2_module_string()); |
109 | - return ret; |
110 | |
111 | case X86_BUG_SPEC_STORE_BYPASS: |
112 | return sprintf(buf, "%s\n", ssb_strings[ssb_mode]); |
113 | diff --git a/kernel/cpu.c b/kernel/cpu.c |
114 | index 8d7bace9a7b2..b5a0165b7300 100644 |
115 | --- a/kernel/cpu.c |
116 | +++ b/kernel/cpu.c |
117 | @@ -1970,12 +1970,6 @@ static void cpuhp_online_cpu_device(unsigned int cpu) |
118 | kobject_uevent(&dev->kobj, KOBJ_ONLINE); |
119 | } |
120 | |
121 | -/* |
122 | - * Architectures that need SMT-specific errata handling during SMT hotplug |
123 | - * should override this. |
124 | - */ |
125 | -void __weak arch_smt_update(void) { }; |
126 | - |
127 | static int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval) |
128 | { |
129 | int cpu, ret = 0; |
130 | @@ -2002,10 +1996,8 @@ static int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval) |
131 | */ |
132 | cpuhp_offline_cpu_device(cpu); |
133 | } |
134 | - if (!ret) { |
135 | + if (!ret) |
136 | cpu_smt_control = ctrlval; |
137 | - arch_smt_update(); |
138 | - } |
139 | cpu_maps_update_done(); |
140 | return ret; |
141 | } |
142 | @@ -2016,7 +2008,6 @@ static int cpuhp_smt_enable(void) |
143 | |
144 | cpu_maps_update_begin(); |
145 | cpu_smt_control = CPU_SMT_ENABLED; |
146 | - arch_smt_update(); |
147 | for_each_present_cpu(cpu) { |
148 | /* Skip online CPUs and CPUs on offline nodes */ |
149 | if (cpu_online(cpu) || !node_online(cpu_to_node(cpu))) |
150 | diff --git a/net/ipv6/route.c b/net/ipv6/route.c |
151 | index 0db120d2a4fe..b0a72677b7e5 100644 |
152 | --- a/net/ipv6/route.c |
153 | +++ b/net/ipv6/route.c |
154 | @@ -2292,7 +2292,6 @@ static void rt6_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_bu |
155 | if (on_link) |
156 | nrt->rt6i_flags &= ~RTF_GATEWAY; |
157 | |
158 | - nrt->rt6i_protocol = RTPROT_REDIRECT; |
159 | nrt->rt6i_gateway = *(struct in6_addr *)neigh->primary_key; |
160 | |
161 | if (ip6_ins_rt(nrt)) |
162 | @@ -2397,7 +2396,6 @@ static struct rt6_info *rt6_add_route_info(struct net *net, |
163 | .fc_dst_len = prefixlen, |
164 | .fc_flags = RTF_GATEWAY | RTF_ADDRCONF | RTF_ROUTEINFO | |
165 | RTF_UP | RTF_PREF(pref), |
166 | - .fc_protocol = RTPROT_RA, |
167 | .fc_nlinfo.portid = 0, |
168 | .fc_nlinfo.nlh = NULL, |
169 | .fc_nlinfo.nl_net = net, |
170 | @@ -2450,7 +2448,6 @@ struct rt6_info *rt6_add_dflt_router(const struct in6_addr *gwaddr, |
171 | .fc_ifindex = dev->ifindex, |
172 | .fc_flags = RTF_GATEWAY | RTF_ADDRCONF | RTF_DEFAULT | |
173 | RTF_UP | RTF_EXPIRES | RTF_PREF(pref), |
174 | - .fc_protocol = RTPROT_RA, |
175 | .fc_nlinfo.portid = 0, |
176 | .fc_nlinfo.nlh = NULL, |
177 | .fc_nlinfo.nl_net = dev_net(dev), |
178 | @@ -3247,6 +3244,14 @@ static int rt6_fill_node(struct net *net, |
179 | } |
180 | rtm->rtm_scope = RT_SCOPE_UNIVERSE; |
181 | rtm->rtm_protocol = rt->rt6i_protocol; |
182 | + if (rt->rt6i_flags & RTF_DYNAMIC) |
183 | + rtm->rtm_protocol = RTPROT_REDIRECT; |
184 | + else if (rt->rt6i_flags & RTF_ADDRCONF) { |
185 | + if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ROUTEINFO)) |
186 | + rtm->rtm_protocol = RTPROT_RA; |
187 | + else |
188 | + rtm->rtm_protocol = RTPROT_KERNEL; |
189 | + } |
190 | |
191 | if (rt->rt6i_flags & RTF_CACHE) |
192 | rtm->rtm_flags |= RTM_F_CLONED; |