Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:4.19 commit in: /
Date: Sat, 06 Nov 2021 13:26:57
Message-Id: 1636205194.e37bad027ea4267ee727638e5e9ddf24c395dd9e.mpagano@gentoo
1 commit: e37bad027ea4267ee727638e5e9ddf24c395dd9e
2 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org>
3 AuthorDate: Sat Nov 6 13:26:34 2021 +0000
4 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org>
5 CommitDate: Sat Nov 6 13:26:34 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=e37bad02
7
8 Linux patch 4.19.216
9
10 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>
11
12 0000_README | 4 +
13 1215_linux-4.19.216.patch | 369 ++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 373 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index c6c5d27..df19013 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -899,6 +899,10 @@ Patch: 1214_linux-4.19.215.patch
21 From: https://www.kernel.org
22 Desc: Linux 4.19.215
23
24 +Patch: 1215_linux-4.19.216.patch
25 +From: https://www.kernel.org
26 +Desc: Linux 4.19.216
27 +
28 Patch: 1500_XATTR_USER_PREFIX.patch
29 From: https://bugs.gentoo.org/show_bug.cgi?id=470644
30 Desc: Support for namespace user.pax.* on tmpfs.
31
32 diff --git a/1215_linux-4.19.216.patch b/1215_linux-4.19.216.patch
33 new file mode 100644
34 index 0000000..9a59f5e
35 --- /dev/null
36 +++ b/1215_linux-4.19.216.patch
37 @@ -0,0 +1,369 @@
38 +diff --git a/Makefile b/Makefile
39 +index 40657b8e92f1c..f8255c787f7e8 100644
40 +--- a/Makefile
41 ++++ b/Makefile
42 +@@ -1,7 +1,7 @@
43 + # SPDX-License-Identifier: GPL-2.0
44 + VERSION = 4
45 + PATCHLEVEL = 19
46 +-SUBLEVEL = 215
47 ++SUBLEVEL = 216
48 + EXTRAVERSION =
49 + NAME = "People's Front"
50 +
51 +diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtable.h
52 +index cf4be70d58925..f231963b40116 100644
53 +--- a/arch/arc/include/asm/pgtable.h
54 ++++ b/arch/arc/include/asm/pgtable.h
55 +@@ -138,8 +138,10 @@
56 +
57 + #ifdef CONFIG_ARC_HAS_PAE40
58 + #define PTE_BITS_NON_RWX_IN_PD1 (0xff00000000 | PAGE_MASK | _PAGE_CACHEABLE)
59 ++#define MAX_POSSIBLE_PHYSMEM_BITS 40
60 + #else
61 + #define PTE_BITS_NON_RWX_IN_PD1 (PAGE_MASK | _PAGE_CACHEABLE)
62 ++#define MAX_POSSIBLE_PHYSMEM_BITS 32
63 + #endif
64 +
65 + /**************************************************************************
66 +diff --git a/arch/arm/include/asm/pgtable-2level.h b/arch/arm/include/asm/pgtable-2level.h
67 +index 12659ce5c1f38..90bf19d993782 100644
68 +--- a/arch/arm/include/asm/pgtable-2level.h
69 ++++ b/arch/arm/include/asm/pgtable-2level.h
70 +@@ -78,6 +78,8 @@
71 + #define PTE_HWTABLE_OFF (PTE_HWTABLE_PTRS * sizeof(pte_t))
72 + #define PTE_HWTABLE_SIZE (PTRS_PER_PTE * sizeof(u32))
73 +
74 ++#define MAX_POSSIBLE_PHYSMEM_BITS 32
75 ++
76 + /*
77 + * PMD_SHIFT determines the size of the area a second-level page table can map
78 + * PGDIR_SHIFT determines what a third-level page table entry can map
79 +diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h
80 +index 6d50a11d77934..7ba08dd650e32 100644
81 +--- a/arch/arm/include/asm/pgtable-3level.h
82 ++++ b/arch/arm/include/asm/pgtable-3level.h
83 +@@ -37,6 +37,8 @@
84 + #define PTE_HWTABLE_OFF (0)
85 + #define PTE_HWTABLE_SIZE (PTRS_PER_PTE * sizeof(u64))
86 +
87 ++#define MAX_POSSIBLE_PHYSMEM_BITS 40
88 ++
89 + /*
90 + * PGDIR_SHIFT determines the size a top-level page table entry can map.
91 + */
92 +diff --git a/arch/mips/include/asm/pgtable-32.h b/arch/mips/include/asm/pgtable-32.h
93 +index 74afe8c76bdd0..215fb48f644b9 100644
94 +--- a/arch/mips/include/asm/pgtable-32.h
95 ++++ b/arch/mips/include/asm/pgtable-32.h
96 +@@ -111,6 +111,7 @@ static inline void pmd_clear(pmd_t *pmdp)
97 +
98 + #if defined(CONFIG_XPA)
99 +
100 ++#define MAX_POSSIBLE_PHYSMEM_BITS 40
101 + #define pte_pfn(x) (((unsigned long)((x).pte_high >> _PFN_SHIFT)) | (unsigned long)((x).pte_low << _PAGE_PRESENT_SHIFT))
102 + static inline pte_t
103 + pfn_pte(unsigned long pfn, pgprot_t prot)
104 +@@ -126,6 +127,7 @@ pfn_pte(unsigned long pfn, pgprot_t prot)
105 +
106 + #elif defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32)
107 +
108 ++#define MAX_POSSIBLE_PHYSMEM_BITS 36
109 + #define pte_pfn(x) ((unsigned long)((x).pte_high >> 6))
110 +
111 + static inline pte_t pfn_pte(unsigned long pfn, pgprot_t prot)
112 +@@ -140,6 +142,7 @@ static inline pte_t pfn_pte(unsigned long pfn, pgprot_t prot)
113 +
114 + #else
115 +
116 ++#define MAX_POSSIBLE_PHYSMEM_BITS 32
117 + #ifdef CONFIG_CPU_VR41XX
118 + #define pte_pfn(x) ((unsigned long)((x).pte >> (PAGE_SHIFT + 2)))
119 + #define pfn_pte(pfn, prot) __pte(((pfn) << (PAGE_SHIFT + 2)) | pgprot_val(prot))
120 +diff --git a/arch/powerpc/include/asm/pte-common.h b/arch/powerpc/include/asm/pte-common.h
121 +index bef56141a549e..f740f67ebf980 100644
122 +--- a/arch/powerpc/include/asm/pte-common.h
123 ++++ b/arch/powerpc/include/asm/pte-common.h
124 +@@ -110,8 +110,10 @@ static inline bool pte_user(pte_t pte)
125 + */
126 + #if defined(CONFIG_PPC32) && defined(CONFIG_PTE_64BIT)
127 + #define PTE_RPN_MASK (~((1ULL<<PTE_RPN_SHIFT)-1))
128 ++#define MAX_POSSIBLE_PHYSMEM_BITS 36
129 + #else
130 + #define PTE_RPN_MASK (~((1UL<<PTE_RPN_SHIFT)-1))
131 ++#define MAX_POSSIBLE_PHYSMEM_BITS 32
132 + #endif
133 +
134 + /* _PAGE_CHG_MASK masks of bits that are to be preserved across
135 +diff --git a/arch/riscv/include/asm/pgtable-32.h b/arch/riscv/include/asm/pgtable-32.h
136 +index d61974b741820..5cfe5a1318679 100644
137 +--- a/arch/riscv/include/asm/pgtable-32.h
138 ++++ b/arch/riscv/include/asm/pgtable-32.h
139 +@@ -22,4 +22,6 @@
140 + #define PGDIR_SIZE (_AC(1, UL) << PGDIR_SHIFT)
141 + #define PGDIR_MASK (~(PGDIR_SIZE - 1))
142 +
143 ++#define MAX_POSSIBLE_PHYSMEM_BITS 34
144 ++
145 + #endif /* _ASM_RISCV_PGTABLE_32_H */
146 +diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
147 +index 2380ebd9b7fda..e1992f361c9a6 100644
148 +--- a/drivers/amba/bus.c
149 ++++ b/drivers/amba/bus.c
150 +@@ -360,9 +360,6 @@ static int amba_device_try_add(struct amba_device *dev, struct resource *parent)
151 + void __iomem *tmp;
152 + int i, ret;
153 +
154 +- WARN_ON(dev->irq[0] == (unsigned int)-1);
155 +- WARN_ON(dev->irq[1] == (unsigned int)-1);
156 +-
157 + ret = request_resource(parent, &dev->res);
158 + if (ret)
159 + goto err_out;
160 +diff --git a/drivers/infiniband/hw/qib/qib_user_sdma.c b/drivers/infiniband/hw/qib/qib_user_sdma.c
161 +index 926f3c8eba69f..47ed3ab25dc95 100644
162 +--- a/drivers/infiniband/hw/qib/qib_user_sdma.c
163 ++++ b/drivers/infiniband/hw/qib/qib_user_sdma.c
164 +@@ -606,7 +606,7 @@ done:
165 + /*
166 + * How many pages in this iovec element?
167 + */
168 +-static int qib_user_sdma_num_pages(const struct iovec *iov)
169 ++static size_t qib_user_sdma_num_pages(const struct iovec *iov)
170 + {
171 + const unsigned long addr = (unsigned long) iov->iov_base;
172 + const unsigned long len = iov->iov_len;
173 +@@ -662,7 +662,7 @@ static void qib_user_sdma_free_pkt_frag(struct device *dev,
174 + static int qib_user_sdma_pin_pages(const struct qib_devdata *dd,
175 + struct qib_user_sdma_queue *pq,
176 + struct qib_user_sdma_pkt *pkt,
177 +- unsigned long addr, int tlen, int npages)
178 ++ unsigned long addr, int tlen, size_t npages)
179 + {
180 + struct page *pages[8];
181 + int i, j;
182 +@@ -726,7 +726,7 @@ static int qib_user_sdma_pin_pkt(const struct qib_devdata *dd,
183 + unsigned long idx;
184 +
185 + for (idx = 0; idx < niov; idx++) {
186 +- const int npages = qib_user_sdma_num_pages(iov + idx);
187 ++ const size_t npages = qib_user_sdma_num_pages(iov + idx);
188 + const unsigned long addr = (unsigned long) iov[idx].iov_base;
189 +
190 + ret = qib_user_sdma_pin_pages(dd, pq, pkt, addr,
191 +@@ -828,8 +828,8 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
192 + unsigned pktnw;
193 + unsigned pktnwc;
194 + int nfrags = 0;
195 +- int npages = 0;
196 +- int bytes_togo = 0;
197 ++ size_t npages = 0;
198 ++ size_t bytes_togo = 0;
199 + int tiddma = 0;
200 + int cfur;
201 +
202 +@@ -889,7 +889,11 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
203 +
204 + npages += qib_user_sdma_num_pages(&iov[idx]);
205 +
206 +- bytes_togo += slen;
207 ++ if (check_add_overflow(bytes_togo, slen, &bytes_togo) ||
208 ++ bytes_togo > type_max(typeof(pkt->bytes_togo))) {
209 ++ ret = -EINVAL;
210 ++ goto free_pbc;
211 ++ }
212 + pktnwc += slen >> 2;
213 + idx++;
214 + nfrags++;
215 +@@ -908,10 +912,10 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
216 + }
217 +
218 + if (frag_size) {
219 +- int pktsize, tidsmsize, n;
220 ++ size_t tidsmsize, n, pktsize, sz, addrlimit;
221 +
222 + n = npages*((2*PAGE_SIZE/frag_size)+1);
223 +- pktsize = sizeof(*pkt) + sizeof(pkt->addr[0])*n;
224 ++ pktsize = struct_size(pkt, addr, n);
225 +
226 + /*
227 + * Determine if this is tid-sdma or just sdma.
228 +@@ -926,14 +930,24 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
229 + else
230 + tidsmsize = 0;
231 +
232 +- pkt = kmalloc(pktsize+tidsmsize, GFP_KERNEL);
233 ++ if (check_add_overflow(pktsize, tidsmsize, &sz)) {
234 ++ ret = -EINVAL;
235 ++ goto free_pbc;
236 ++ }
237 ++ pkt = kmalloc(sz, GFP_KERNEL);
238 + if (!pkt) {
239 + ret = -ENOMEM;
240 + goto free_pbc;
241 + }
242 + pkt->largepkt = 1;
243 + pkt->frag_size = frag_size;
244 +- pkt->addrlimit = n + ARRAY_SIZE(pkt->addr);
245 ++ if (check_add_overflow(n, ARRAY_SIZE(pkt->addr),
246 ++ &addrlimit) ||
247 ++ addrlimit > type_max(typeof(pkt->addrlimit))) {
248 ++ ret = -EINVAL;
249 ++ goto free_pbc;
250 ++ }
251 ++ pkt->addrlimit = addrlimit;
252 +
253 + if (tiddma) {
254 + char *tidsm = (char *)pkt + pktsize;
255 +diff --git a/drivers/media/firewire/firedtv-avc.c b/drivers/media/firewire/firedtv-avc.c
256 +index 3ef5df1648d77..8c31cf90c5907 100644
257 +--- a/drivers/media/firewire/firedtv-avc.c
258 ++++ b/drivers/media/firewire/firedtv-avc.c
259 +@@ -1169,7 +1169,11 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length)
260 + read_pos += program_info_length;
261 + write_pos += program_info_length;
262 + }
263 +- while (read_pos < length) {
264 ++ while (read_pos + 4 < length) {
265 ++ if (write_pos + 4 >= sizeof(c->operand) - 4) {
266 ++ ret = -EINVAL;
267 ++ goto out;
268 ++ }
269 + c->operand[write_pos++] = msg[read_pos++];
270 + c->operand[write_pos++] = msg[read_pos++];
271 + c->operand[write_pos++] = msg[read_pos++];
272 +@@ -1181,13 +1185,17 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length)
273 + c->operand[write_pos++] = es_info_length >> 8;
274 + c->operand[write_pos++] = es_info_length & 0xff;
275 + if (es_info_length > 0) {
276 ++ if (read_pos >= length) {
277 ++ ret = -EINVAL;
278 ++ goto out;
279 ++ }
280 + pmt_cmd_id = msg[read_pos++];
281 + if (pmt_cmd_id != 1 && pmt_cmd_id != 4)
282 + dev_err(fdtv->device, "invalid pmt_cmd_id %d at stream level\n",
283 + pmt_cmd_id);
284 +
285 +- if (es_info_length > sizeof(c->operand) - 4 -
286 +- write_pos) {
287 ++ if (es_info_length > sizeof(c->operand) - 4 - write_pos ||
288 ++ es_info_length > length - read_pos) {
289 + ret = -EINVAL;
290 + goto out;
291 + }
292 +diff --git a/drivers/media/firewire/firedtv-ci.c b/drivers/media/firewire/firedtv-ci.c
293 +index 8dc5a7495abee..14f779812d250 100644
294 +--- a/drivers/media/firewire/firedtv-ci.c
295 ++++ b/drivers/media/firewire/firedtv-ci.c
296 +@@ -138,6 +138,8 @@ static int fdtv_ca_pmt(struct firedtv *fdtv, void *arg)
297 + } else {
298 + data_length = msg->msg[3];
299 + }
300 ++ if (data_length > sizeof(msg->msg) - data_pos)
301 ++ return -EINVAL;
302 +
303 + return avc_ca_pmt(fdtv, &msg->msg[data_pos], data_length);
304 + }
305 +diff --git a/drivers/net/ethernet/sfc/ethtool.c b/drivers/net/ethernet/sfc/ethtool.c
306 +index 3143588ffd777..82b32c742d69e 100644
307 +--- a/drivers/net/ethernet/sfc/ethtool.c
308 ++++ b/drivers/net/ethernet/sfc/ethtool.c
309 +@@ -131,20 +131,14 @@ efx_ethtool_get_link_ksettings(struct net_device *net_dev,
310 + {
311 + struct efx_nic *efx = netdev_priv(net_dev);
312 + struct efx_link_state *link_state = &efx->link_state;
313 +- u32 supported;
314 +
315 + mutex_lock(&efx->mac_lock);
316 + efx->phy_op->get_link_ksettings(efx, cmd);
317 + mutex_unlock(&efx->mac_lock);
318 +
319 + /* Both MACs support pause frames (bidirectional and respond-only) */
320 +- ethtool_convert_link_mode_to_legacy_u32(&supported,
321 +- cmd->link_modes.supported);
322 +-
323 +- supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;
324 +-
325 +- ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
326 +- supported);
327 ++ ethtool_link_ksettings_add_link_mode(cmd, supported, Pause);
328 ++ ethtool_link_ksettings_add_link_mode(cmd, supported, Asym_Pause);
329 +
330 + if (LOOPBACK_INTERNAL(efx)) {
331 + cmd->base.speed = link_state->speed;
332 +diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
333 +index fc1356d101b0a..febe29a9b8b06 100644
334 +--- a/drivers/scsi/scsi.c
335 ++++ b/drivers/scsi/scsi.c
336 +@@ -575,8 +575,10 @@ EXPORT_SYMBOL(scsi_device_get);
337 + */
338 + void scsi_device_put(struct scsi_device *sdev)
339 + {
340 +- module_put(sdev->host->hostt->module);
341 ++ struct module *mod = sdev->host->hostt->module;
342 ++
343 + put_device(&sdev->sdev_gendev);
344 ++ module_put(mod);
345 + }
346 + EXPORT_SYMBOL(scsi_device_put);
347 +
348 +diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
349 +index 186f779fa60c4..d4be13892b26e 100644
350 +--- a/drivers/scsi/scsi_sysfs.c
351 ++++ b/drivers/scsi/scsi_sysfs.c
352 +@@ -431,9 +431,12 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work)
353 + struct list_head *this, *tmp;
354 + struct scsi_vpd *vpd_pg80 = NULL, *vpd_pg83 = NULL;
355 + unsigned long flags;
356 ++ struct module *mod;
357 +
358 + sdev = container_of(work, struct scsi_device, ew.work);
359 +
360 ++ mod = sdev->host->hostt->module;
361 ++
362 + scsi_dh_release_device(sdev);
363 +
364 + parent = sdev->sdev_gendev.parent;
365 +@@ -474,11 +477,17 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work)
366 +
367 + if (parent)
368 + put_device(parent);
369 ++ module_put(mod);
370 + }
371 +
372 + static void scsi_device_dev_release(struct device *dev)
373 + {
374 + struct scsi_device *sdp = to_scsi_device(dev);
375 ++
376 ++ /* Set module pointer as NULL in case of module unloading */
377 ++ if (!try_module_get(sdp->host->hostt->module))
378 ++ sdp->host->hostt->module = NULL;
379 ++
380 + execute_in_process_context(scsi_device_dev_release_usercontext,
381 + &sdp->ew);
382 + }
383 +diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
384 +index 5901b00059294..1544331bec27f 100644
385 +--- a/include/asm-generic/pgtable.h
386 ++++ b/include/asm-generic/pgtable.h
387 +@@ -1115,6 +1115,19 @@ static inline bool arch_has_pfn_modify_check(void)
388 +
389 + #endif /* !__ASSEMBLY__ */
390 +
391 ++#if !defined(MAX_POSSIBLE_PHYSMEM_BITS) && !defined(CONFIG_64BIT)
392 ++#ifdef CONFIG_PHYS_ADDR_T_64BIT
393 ++/*
394 ++ * ZSMALLOC needs to know the highest PFN on 32-bit architectures
395 ++ * with physical address space extension, but falls back to
396 ++ * BITS_PER_LONG otherwise.
397 ++ */
398 ++#error Missing MAX_POSSIBLE_PHYSMEM_BITS definition
399 ++#else
400 ++#define MAX_POSSIBLE_PHYSMEM_BITS 32
401 ++#endif
402 ++#endif
403 ++
404 + #ifndef has_transparent_hugepage
405 + #ifdef CONFIG_TRANSPARENT_HUGEPAGE
406 + #define has_transparent_hugepage() 1