1 |
commit: 06d98eb7040ae38698eb088405971c6ad8b19c5c |
2 |
Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
3 |
AuthorDate: Fri Sep 3 11:25:17 2021 +0000 |
4 |
Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
5 |
CommitDate: Fri Sep 3 11:25:17 2021 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=06d98eb7 |
7 |
|
8 |
Linux patch 4.4.283 |
9 |
|
10 |
Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org> |
11 |
|
12 |
0000_README | 4 + |
13 |
1282_linux-4.4.283.patch | 233 +++++++++++++++++++++++++++++++++++++++++++++++ |
14 |
2 files changed, 237 insertions(+) |
15 |
|
16 |
diff --git a/0000_README b/0000_README |
17 |
index ffd0e18..66d01d4 100644 |
18 |
--- a/0000_README |
19 |
+++ b/0000_README |
20 |
@@ -1171,6 +1171,10 @@ Patch: 1281_linux-4.4.282.patch |
21 |
From: http://www.kernel.org |
22 |
Desc: Linux 4.4.282 |
23 |
|
24 |
+Patch: 1282_linux-4.4.283.patch |
25 |
+From: http://www.kernel.org |
26 |
+Desc: Linux 4.4.283 |
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/1282_linux-4.4.283.patch b/1282_linux-4.4.283.patch |
33 |
new file mode 100644 |
34 |
index 0000000..0f6c067 |
35 |
--- /dev/null |
36 |
+++ b/1282_linux-4.4.283.patch |
37 |
@@ -0,0 +1,233 @@ |
38 |
+diff --git a/Makefile b/Makefile |
39 |
+index 9ddec5e8fca3d..2ec9a780cfe73 100644 |
40 |
+--- a/Makefile |
41 |
++++ b/Makefile |
42 |
+@@ -1,6 +1,6 @@ |
43 |
+ VERSION = 4 |
44 |
+ PATCHLEVEL = 4 |
45 |
+-SUBLEVEL = 282 |
46 |
++SUBLEVEL = 283 |
47 |
+ EXTRAVERSION = |
48 |
+ NAME = Blurry Fish Butt |
49 |
+ |
50 |
+diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c |
51 |
+index ae6b798b76bb2..40c251ef175db 100644 |
52 |
+--- a/drivers/block/floppy.c |
53 |
++++ b/drivers/block/floppy.c |
54 |
+@@ -4066,22 +4066,21 @@ static int floppy_open(struct block_device *bdev, fmode_t mode) |
55 |
+ if (UFDCS->rawcmd == 1) |
56 |
+ UFDCS->rawcmd = 2; |
57 |
+ |
58 |
+- if (mode & (FMODE_READ|FMODE_WRITE)) { |
59 |
+- UDRS->last_checked = 0; |
60 |
+- clear_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags); |
61 |
+- check_disk_change(bdev); |
62 |
+- if (test_bit(FD_DISK_CHANGED_BIT, &UDRS->flags)) |
63 |
+- goto out; |
64 |
+- if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags)) |
65 |
++ if (!(mode & FMODE_NDELAY)) { |
66 |
++ if (mode & (FMODE_READ|FMODE_WRITE)) { |
67 |
++ UDRS->last_checked = 0; |
68 |
++ clear_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags); |
69 |
++ check_disk_change(bdev); |
70 |
++ if (test_bit(FD_DISK_CHANGED_BIT, &UDRS->flags)) |
71 |
++ goto out; |
72 |
++ if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags)) |
73 |
++ goto out; |
74 |
++ } |
75 |
++ res = -EROFS; |
76 |
++ if ((mode & FMODE_WRITE) && |
77 |
++ !test_bit(FD_DISK_WRITABLE_BIT, &UDRS->flags)) |
78 |
+ goto out; |
79 |
+ } |
80 |
+- |
81 |
+- res = -EROFS; |
82 |
+- |
83 |
+- if ((mode & FMODE_WRITE) && |
84 |
+- !test_bit(FD_DISK_WRITABLE_BIT, &UDRS->flags)) |
85 |
+- goto out; |
86 |
+- |
87 |
+ mutex_unlock(&open_lock); |
88 |
+ mutex_unlock(&floppy_mutex); |
89 |
+ return 0; |
90 |
+diff --git a/drivers/net/can/usb/esd_usb2.c b/drivers/net/can/usb/esd_usb2.c |
91 |
+index a8ebdcbc89356..c1b1062bbc378 100644 |
92 |
+--- a/drivers/net/can/usb/esd_usb2.c |
93 |
++++ b/drivers/net/can/usb/esd_usb2.c |
94 |
+@@ -236,8 +236,8 @@ static void esd_usb2_rx_event(struct esd_usb2_net_priv *priv, |
95 |
+ if (id == ESD_EV_CAN_ERROR_EXT) { |
96 |
+ u8 state = msg->msg.rx.data[0]; |
97 |
+ u8 ecc = msg->msg.rx.data[1]; |
98 |
+- u8 txerr = msg->msg.rx.data[2]; |
99 |
+- u8 rxerr = msg->msg.rx.data[3]; |
100 |
++ u8 rxerr = msg->msg.rx.data[2]; |
101 |
++ u8 txerr = msg->msg.rx.data[3]; |
102 |
+ |
103 |
+ skb = alloc_can_err_skb(priv->netdev, &cf); |
104 |
+ if (skb == NULL) { |
105 |
+diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c |
106 |
+index 485b9cc53f8b0..cd7403d09c3d4 100644 |
107 |
+--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c |
108 |
++++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c |
109 |
+@@ -1010,6 +1010,8 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, bool link) |
110 |
+ { |
111 |
+ u32 reg = link << (E1000_LTRV_REQ_SHIFT + E1000_LTRV_NOSNOOP_SHIFT) | |
112 |
+ link << E1000_LTRV_REQ_SHIFT | E1000_LTRV_SEND; |
113 |
++ u16 max_ltr_enc_d = 0; /* maximum LTR decoded by platform */ |
114 |
++ u16 lat_enc_d = 0; /* latency decoded */ |
115 |
+ u16 lat_enc = 0; /* latency encoded */ |
116 |
+ |
117 |
+ if (link) { |
118 |
+@@ -1063,7 +1065,17 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, bool link) |
119 |
+ E1000_PCI_LTR_CAP_LPT + 2, &max_nosnoop); |
120 |
+ max_ltr_enc = max_t(u16, max_snoop, max_nosnoop); |
121 |
+ |
122 |
+- if (lat_enc > max_ltr_enc) |
123 |
++ lat_enc_d = (lat_enc & E1000_LTRV_VALUE_MASK) * |
124 |
++ (1U << (E1000_LTRV_SCALE_FACTOR * |
125 |
++ ((lat_enc & E1000_LTRV_SCALE_MASK) |
126 |
++ >> E1000_LTRV_SCALE_SHIFT))); |
127 |
++ |
128 |
++ max_ltr_enc_d = (max_ltr_enc & E1000_LTRV_VALUE_MASK) * |
129 |
++ (1U << (E1000_LTRV_SCALE_FACTOR * |
130 |
++ ((max_ltr_enc & E1000_LTRV_SCALE_MASK) |
131 |
++ >> E1000_LTRV_SCALE_SHIFT))); |
132 |
++ |
133 |
++ if (lat_enc_d > max_ltr_enc_d) |
134 |
+ lat_enc = max_ltr_enc; |
135 |
+ } |
136 |
+ |
137 |
+diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.h b/drivers/net/ethernet/intel/e1000e/ich8lan.h |
138 |
+index 34c551e322ebd..3a16c457c8dd2 100644 |
139 |
+--- a/drivers/net/ethernet/intel/e1000e/ich8lan.h |
140 |
++++ b/drivers/net/ethernet/intel/e1000e/ich8lan.h |
141 |
+@@ -284,8 +284,11 @@ |
142 |
+ |
143 |
+ /* Latency Tolerance Reporting */ |
144 |
+ #define E1000_LTRV 0x000F8 |
145 |
++#define E1000_LTRV_VALUE_MASK 0x000003FF |
146 |
+ #define E1000_LTRV_SCALE_MAX 5 |
147 |
+ #define E1000_LTRV_SCALE_FACTOR 5 |
148 |
++#define E1000_LTRV_SCALE_SHIFT 10 |
149 |
++#define E1000_LTRV_SCALE_MASK 0x00001C00 |
150 |
+ #define E1000_LTRV_REQ_SHIFT 15 |
151 |
+ #define E1000_LTRV_NOSNOOP_SHIFT 16 |
152 |
+ #define E1000_LTRV_SEND (1 << 30) |
153 |
+diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c |
154 |
+index 575da945f151d..d6b25aba40045 100644 |
155 |
+--- a/drivers/net/ethernet/marvell/mvneta.c |
156 |
++++ b/drivers/net/ethernet/marvell/mvneta.c |
157 |
+@@ -90,7 +90,7 @@ |
158 |
+ #define MVNETA_DESC_SWAP BIT(6) |
159 |
+ #define MVNETA_TX_BRST_SZ_MASK(burst) ((burst) << 22) |
160 |
+ #define MVNETA_PORT_STATUS 0x2444 |
161 |
+-#define MVNETA_TX_IN_PRGRS BIT(1) |
162 |
++#define MVNETA_TX_IN_PRGRS BIT(0) |
163 |
+ #define MVNETA_TX_FIFO_EMPTY BIT(8) |
164 |
+ #define MVNETA_RX_MIN_FRAME_SIZE 0x247c |
165 |
+ #define MVNETA_SERDES_CFG 0x24A0 |
166 |
+diff --git a/drivers/tty/vt/vt_ioctl.c b/drivers/tty/vt/vt_ioctl.c |
167 |
+index e1a8f41212063..97475bb46f84c 100644 |
168 |
+--- a/drivers/tty/vt/vt_ioctl.c |
169 |
++++ b/drivers/tty/vt/vt_ioctl.c |
170 |
+@@ -487,16 +487,19 @@ int vt_ioctl(struct tty_struct *tty, |
171 |
+ ret = -EINVAL; |
172 |
+ goto out; |
173 |
+ } |
174 |
+- /* FIXME: this needs the console lock extending */ |
175 |
+- if (vc->vc_mode == (unsigned char) arg) |
176 |
++ console_lock(); |
177 |
++ if (vc->vc_mode == (unsigned char) arg) { |
178 |
++ console_unlock(); |
179 |
+ break; |
180 |
++ } |
181 |
+ vc->vc_mode = (unsigned char) arg; |
182 |
+- if (console != fg_console) |
183 |
++ if (console != fg_console) { |
184 |
++ console_unlock(); |
185 |
+ break; |
186 |
++ } |
187 |
+ /* |
188 |
+ * explicitly blank/unblank the screen if switching modes |
189 |
+ */ |
190 |
+- console_lock(); |
191 |
+ if (arg == KD_TEXT) |
192 |
+ do_unblank_screen(1); |
193 |
+ else |
194 |
+diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c |
195 |
+index 3f3535d3c99ee..2cff9c40f28aa 100644 |
196 |
+--- a/drivers/usb/serial/ch341.c |
197 |
++++ b/drivers/usb/serial/ch341.c |
198 |
+@@ -585,7 +585,6 @@ static struct usb_serial_driver ch341_device = { |
199 |
+ .owner = THIS_MODULE, |
200 |
+ .name = "ch341-uart", |
201 |
+ }, |
202 |
+- .bulk_in_size = 512, |
203 |
+ .id_table = id_table, |
204 |
+ .num_ports = 1, |
205 |
+ .open = ch341_open, |
206 |
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c |
207 |
+index b3336a7c09e0b..02ded56bcbc6b 100644 |
208 |
+--- a/drivers/usb/serial/option.c |
209 |
++++ b/drivers/usb/serial/option.c |
210 |
+@@ -2058,6 +2058,8 @@ static const struct usb_device_id option_ids[] = { |
211 |
+ .driver_info = RSVD(4) | RSVD(5) }, |
212 |
+ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */ |
213 |
+ .driver_info = RSVD(6) }, |
214 |
++ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0xff, 0x30) }, /* Fibocom FG150 Diag */ |
215 |
++ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0, 0) }, /* Fibocom FG150 AT */ |
216 |
+ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */ |
217 |
+ { USB_DEVICE_INTERFACE_CLASS(0x2df3, 0x9d03, 0xff) }, /* LongSung M5710 */ |
218 |
+ { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1404, 0xff) }, /* GosunCn GM500 RNDIS */ |
219 |
+diff --git a/drivers/vhost/vringh.c b/drivers/vhost/vringh.c |
220 |
+index d56736655dec4..da47542496cc3 100644 |
221 |
+--- a/drivers/vhost/vringh.c |
222 |
++++ b/drivers/vhost/vringh.c |
223 |
+@@ -329,7 +329,7 @@ __vringh_iov(struct vringh *vrh, u16 i, |
224 |
+ iov = wiov; |
225 |
+ else { |
226 |
+ iov = riov; |
227 |
+- if (unlikely(wiov && wiov->i)) { |
228 |
++ if (unlikely(wiov && wiov->used)) { |
229 |
+ vringh_bad("Readable desc %p after writable", |
230 |
+ &descs[i]); |
231 |
+ err = -EINVAL; |
232 |
+diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c |
233 |
+index 348be7368f490..afb84c27110d8 100644 |
234 |
+--- a/drivers/video/fbdev/core/fbmem.c |
235 |
++++ b/drivers/video/fbdev/core/fbmem.c |
236 |
+@@ -1001,6 +1001,10 @@ fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var) |
237 |
+ goto done; |
238 |
+ } |
239 |
+ |
240 |
++ /* bitfill_aligned() assumes that it's at least 8x8 */ |
241 |
++ if (var->xres < 8 || var->yres < 8) |
242 |
++ return -EINVAL; |
243 |
++ |
244 |
+ ret = info->fbops->fb_check_var(var, info); |
245 |
+ |
246 |
+ if (ret) |
247 |
+diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c |
248 |
+index 6b3565feddb21..b15c24c4d91fc 100644 |
249 |
+--- a/drivers/virtio/virtio_ring.c |
250 |
++++ b/drivers/virtio/virtio_ring.c |
251 |
+@@ -840,7 +840,7 @@ bool virtqueue_is_broken(struct virtqueue *_vq) |
252 |
+ { |
253 |
+ struct vring_virtqueue *vq = to_vvq(_vq); |
254 |
+ |
255 |
+- return vq->broken; |
256 |
++ return READ_ONCE(vq->broken); |
257 |
+ } |
258 |
+ EXPORT_SYMBOL_GPL(virtqueue_is_broken); |
259 |
+ |
260 |
+@@ -854,7 +854,9 @@ void virtio_break_device(struct virtio_device *dev) |
261 |
+ |
262 |
+ list_for_each_entry(_vq, &dev->vqs, list) { |
263 |
+ struct vring_virtqueue *vq = to_vvq(_vq); |
264 |
+- vq->broken = true; |
265 |
++ |
266 |
++ /* Pairs with READ_ONCE() in virtqueue_is_broken(). */ |
267 |
++ WRITE_ONCE(vq->broken, true); |
268 |
+ } |
269 |
+ } |
270 |
+ EXPORT_SYMBOL_GPL(virtio_break_device); |