Contents of /trunk/kernel-alx-legacy/patches-4.9/0378-4.9.279-all-fixes.patch
Parent Directory | Revision Log
Revision 3680 -
(show annotations)
(download)
Mon Oct 24 14:07:56 2022 UTC (19 months ago) by niro
File size: 5829 byte(s)
Mon Oct 24 14:07:56 2022 UTC (19 months ago) by niro
File size: 5829 byte(s)
-linux-4.9.279
1 | diff --git a/Makefile b/Makefile |
2 | index 82fc1c7475926..b88bc8d14ca38 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 4 |
7 | PATCHLEVEL = 9 |
8 | -SUBLEVEL = 278 |
9 | +SUBLEVEL = 279 |
10 | EXTRAVERSION = |
11 | NAME = Roaring Lionus |
12 | |
13 | diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c |
14 | index 64fdea3328861..96f6edcb00627 100644 |
15 | --- a/drivers/net/usb/r8152.c |
16 | +++ b/drivers/net/usb/r8152.c |
17 | @@ -3347,9 +3347,10 @@ static int rtl8152_close(struct net_device *netdev) |
18 | tp->rtl_ops.down(tp); |
19 | |
20 | mutex_unlock(&tp->control); |
21 | + } |
22 | |
23 | + if (!res) |
24 | usb_autopm_put_interface(tp->intf); |
25 | - } |
26 | |
27 | free_all_mem(tp); |
28 | |
29 | diff --git a/drivers/spi/spi-mt65xx.c b/drivers/spi/spi-mt65xx.c |
30 | index 419aecb942749..dd0bf25d45502 100644 |
31 | --- a/drivers/spi/spi-mt65xx.c |
32 | +++ b/drivers/spi/spi-mt65xx.c |
33 | @@ -337,24 +337,15 @@ static int mtk_spi_fifo_transfer(struct spi_master *master, |
34 | mtk_spi_prepare_transfer(master, xfer); |
35 | mtk_spi_setup_packet(master); |
36 | |
37 | - cnt = xfer->len / 4; |
38 | - if (xfer->tx_buf) |
39 | + if (xfer->tx_buf) { |
40 | + cnt = xfer->len / 4; |
41 | iowrite32_rep(mdata->base + SPI_TX_DATA_REG, xfer->tx_buf, cnt); |
42 | - |
43 | - if (xfer->rx_buf) |
44 | - ioread32_rep(mdata->base + SPI_RX_DATA_REG, xfer->rx_buf, cnt); |
45 | - |
46 | - remainder = xfer->len % 4; |
47 | - if (remainder > 0) { |
48 | - reg_val = 0; |
49 | - if (xfer->tx_buf) { |
50 | + remainder = xfer->len % 4; |
51 | + if (remainder > 0) { |
52 | + reg_val = 0; |
53 | memcpy(®_val, xfer->tx_buf + (cnt * 4), remainder); |
54 | writel(reg_val, mdata->base + SPI_TX_DATA_REG); |
55 | } |
56 | - if (xfer->rx_buf) { |
57 | - reg_val = readl(mdata->base + SPI_RX_DATA_REG); |
58 | - memcpy(xfer->rx_buf + (cnt * 4), ®_val, remainder); |
59 | - } |
60 | } |
61 | |
62 | mtk_spi_enable_transfer(master); |
63 | diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c |
64 | index d4d8b7e36b2ff..2534e44cfd40e 100644 |
65 | --- a/fs/btrfs/compression.c |
66 | +++ b/fs/btrfs/compression.c |
67 | @@ -290,7 +290,7 @@ static void end_compressed_bio_write(struct bio *bio) |
68 | cb->start, |
69 | cb->start + cb->len - 1, |
70 | NULL, |
71 | - bio->bi_error ? 0 : 1); |
72 | + !cb->errors); |
73 | cb->compressed_pages[0]->mapping = NULL; |
74 | |
75 | end_compressed_writeback(inode, cb); |
76 | diff --git a/include/linux/mfd/rt5033-private.h b/include/linux/mfd/rt5033-private.h |
77 | index 1b63fc2f42d1c..52d53d134f72c 100644 |
78 | --- a/include/linux/mfd/rt5033-private.h |
79 | +++ b/include/linux/mfd/rt5033-private.h |
80 | @@ -203,13 +203,13 @@ enum rt5033_reg { |
81 | #define RT5033_REGULATOR_BUCK_VOLTAGE_MIN 1000000U |
82 | #define RT5033_REGULATOR_BUCK_VOLTAGE_MAX 3000000U |
83 | #define RT5033_REGULATOR_BUCK_VOLTAGE_STEP 100000U |
84 | -#define RT5033_REGULATOR_BUCK_VOLTAGE_STEP_NUM 32 |
85 | +#define RT5033_REGULATOR_BUCK_VOLTAGE_STEP_NUM 21 |
86 | |
87 | /* RT5033 regulator LDO output voltage uV */ |
88 | #define RT5033_REGULATOR_LDO_VOLTAGE_MIN 1200000U |
89 | #define RT5033_REGULATOR_LDO_VOLTAGE_MAX 3000000U |
90 | #define RT5033_REGULATOR_LDO_VOLTAGE_STEP 100000U |
91 | -#define RT5033_REGULATOR_LDO_VOLTAGE_STEP_NUM 32 |
92 | +#define RT5033_REGULATOR_LDO_VOLTAGE_STEP_NUM 19 |
93 | |
94 | /* RT5033 regulator SAFE LDO output voltage uV */ |
95 | #define RT5033_REGULATOR_SAFE_LDO_VOLTAGE 4900000U |
96 | diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c |
97 | index 50b9a0bbe5dff..839c534bdcdb9 100644 |
98 | --- a/net/bluetooth/hci_core.c |
99 | +++ b/net/bluetooth/hci_core.c |
100 | @@ -1533,6 +1533,14 @@ int hci_dev_do_close(struct hci_dev *hdev) |
101 | |
102 | BT_DBG("%s %p", hdev->name, hdev); |
103 | |
104 | + if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) && |
105 | + !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && |
106 | + test_bit(HCI_UP, &hdev->flags)) { |
107 | + /* Execute vendor specific shutdown routine */ |
108 | + if (hdev->shutdown) |
109 | + hdev->shutdown(hdev); |
110 | + } |
111 | + |
112 | cancel_delayed_work(&hdev->power_off); |
113 | |
114 | hci_request_cancel_all(hdev); |
115 | @@ -1600,14 +1608,6 @@ int hci_dev_do_close(struct hci_dev *hdev) |
116 | clear_bit(HCI_INIT, &hdev->flags); |
117 | } |
118 | |
119 | - if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) && |
120 | - !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && |
121 | - test_bit(HCI_UP, &hdev->flags)) { |
122 | - /* Execute vendor specific shutdown routine */ |
123 | - if (hdev->shutdown) |
124 | - hdev->shutdown(hdev); |
125 | - } |
126 | - |
127 | /* flush cmd work */ |
128 | flush_work(&hdev->cmd_work); |
129 | |
130 | diff --git a/net/can/raw.c b/net/can/raw.c |
131 | index 2bb50b1535c2f..082965c8dcaf6 100644 |
132 | --- a/net/can/raw.c |
133 | +++ b/net/can/raw.c |
134 | @@ -541,10 +541,18 @@ static int raw_setsockopt(struct socket *sock, int level, int optname, |
135 | return -EFAULT; |
136 | } |
137 | |
138 | + rtnl_lock(); |
139 | lock_sock(sk); |
140 | |
141 | - if (ro->bound && ro->ifindex) |
142 | + if (ro->bound && ro->ifindex) { |
143 | dev = dev_get_by_index(&init_net, ro->ifindex); |
144 | + if (!dev) { |
145 | + if (count > 1) |
146 | + kfree(filter); |
147 | + err = -ENODEV; |
148 | + goto out_fil; |
149 | + } |
150 | + } |
151 | |
152 | if (ro->bound) { |
153 | /* (try to) register the new filters */ |
154 | @@ -581,6 +589,7 @@ static int raw_setsockopt(struct socket *sock, int level, int optname, |
155 | dev_put(dev); |
156 | |
157 | release_sock(sk); |
158 | + rtnl_unlock(); |
159 | |
160 | break; |
161 | |
162 | @@ -593,10 +602,16 @@ static int raw_setsockopt(struct socket *sock, int level, int optname, |
163 | |
164 | err_mask &= CAN_ERR_MASK; |
165 | |
166 | + rtnl_lock(); |
167 | lock_sock(sk); |
168 | |
169 | - if (ro->bound && ro->ifindex) |
170 | + if (ro->bound && ro->ifindex) { |
171 | dev = dev_get_by_index(&init_net, ro->ifindex); |
172 | + if (!dev) { |
173 | + err = -ENODEV; |
174 | + goto out_err; |
175 | + } |
176 | + } |
177 | |
178 | /* remove current error mask */ |
179 | if (ro->bound) { |
180 | @@ -618,6 +633,7 @@ static int raw_setsockopt(struct socket *sock, int level, int optname, |
181 | dev_put(dev); |
182 | |
183 | release_sock(sk); |
184 | + rtnl_unlock(); |
185 | |
186 | break; |
187 | |
188 | diff --git a/net/core/skbuff.c b/net/core/skbuff.c |
189 | index 076444dac96d1..0e34f5ad62162 100644 |
190 | --- a/net/core/skbuff.c |
191 | +++ b/net/core/skbuff.c |
192 | @@ -2288,8 +2288,11 @@ skb_zerocopy_headlen(const struct sk_buff *from) |
193 | |
194 | if (!from->head_frag || |
195 | skb_headlen(from) < L1_CACHE_BYTES || |
196 | - skb_shinfo(from)->nr_frags >= MAX_SKB_FRAGS) |
197 | + skb_shinfo(from)->nr_frags >= MAX_SKB_FRAGS) { |
198 | hlen = skb_headlen(from); |
199 | + if (!hlen) |
200 | + hlen = from->len; |
201 | + } |
202 | |
203 | if (skb_has_frag_list(from)) |
204 | hlen = from->len; |