kernel_optimize_test/drivers
Xie He c7ca03c216 drivers/net/wan/lapbether: Added needed_headroom and a skb->len check
1. Added a skb->len check

This driver expects upper layers to include a pseudo header of 1 byte
when passing down a skb for transmission. This driver will read this
1-byte header. This patch added a skb->len check before reading the
header to make sure the header exists.

2. Changed to use needed_headroom instead of hard_header_len to request
necessary headroom to be allocated

In net/packet/af_packet.c, the function packet_snd first reserves a
headroom of length (dev->hard_header_len + dev->needed_headroom).
Then if the socket is a SOCK_DGRAM socket, it calls dev_hard_header,
which calls dev->header_ops->create, to create the link layer header.
If the socket is a SOCK_RAW socket, it "un-reserves" a headroom of
length (dev->hard_header_len), and assumes the user to provide the
appropriate link layer header.

So according to the logic of af_packet.c, dev->hard_header_len should
be the length of the header that would be created by
dev->header_ops->create.

However, this driver doesn't provide dev->header_ops, so logically
dev->hard_header_len should be 0.

So we should use dev->needed_headroom instead of dev->hard_header_len
to request necessary headroom to be allocated.

This change fixes kernel panic when this driver is used with AF_PACKET
SOCK_RAW sockets.

Call stack when panic:

[  168.399197] skbuff: skb_under_panic: text:ffffffff819d95fb len:20
put:14 head:ffff8882704c0a00 data:ffff8882704c09fd tail:0x11 end:0xc0
dev:veth0
...
[  168.399255] Call Trace:
[  168.399259]  skb_push.cold+0x14/0x24
[  168.399262]  eth_header+0x2b/0xc0
[  168.399267]  lapbeth_data_transmit+0x9a/0xb0 [lapbether]
[  168.399275]  lapb_data_transmit+0x22/0x2c [lapb]
[  168.399277]  lapb_transmit_buffer+0x71/0xb0 [lapb]
[  168.399279]  lapb_kick+0xe3/0x1c0 [lapb]
[  168.399281]  lapb_data_request+0x76/0xc0 [lapb]
[  168.399283]  lapbeth_xmit+0x56/0x90 [lapbether]
[  168.399286]  dev_hard_start_xmit+0x91/0x1f0
[  168.399289]  ? irq_init_percpu_irqstack+0xc0/0x100
[  168.399291]  __dev_queue_xmit+0x721/0x8e0
[  168.399295]  ? packet_parse_headers.isra.0+0xd2/0x110
[  168.399297]  dev_queue_xmit+0x10/0x20
[  168.399298]  packet_sendmsg+0xbf0/0x19b0
......

Cc: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Cc: Martin Schiller <ms@dev.tdt.de>
Cc: Brian Norris <briannorris@chromium.org>
Signed-off-by: Xie He <xie.he.0141@gmail.com>
Acked-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-08-06 17:02:41 -07:00
..
accessibility
acpi for-5.9/drivers-20200803 2020-08-05 10:51:40 -07:00
amba
android drivers: android: Fix the SPDX comment style 2020-07-29 17:05:44 +02:00
ata
atm Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2020-08-05 20:13:21 -07:00
auxdisplay
base Devicetree updates for v5.9: 2020-08-05 13:02:45 -07:00
bcma bcma: gpio: Use irqchip template 2020-08-02 18:26:51 +03:00
block for-5.9/block-merge-20200804 2020-08-05 11:12:34 -07:00
bluetooth Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next 2020-07-31 15:11:52 -07:00
bus MIPS upates for v5.9 2020-08-06 10:54:07 -07:00
cdrom
char drm next for 5.9-rc1 2020-08-05 19:50:06 -07:00
clk Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
clocksource Time, timers and related driver updates: 2020-08-04 18:17:37 -07:00
connector
counter
cpufreq Power management updates for 5.9-rc1 2020-08-03 20:28:08 -07:00
cpuidle cpuidle: change enter_s2idle() prototype 2020-07-29 18:38:30 +02:00
crypto Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2020-08-05 20:13:21 -07:00
dax
dca
devfreq PM / devfreq: Fix the wrong end with semicolon 2020-07-30 17:22:58 +09:00
dio
dma drm next for 5.9-rc1 2020-08-05 19:50:06 -07:00
dma-buf
edac 17ed808ad2 ("EDAC: Fix reference count leaks") 2020-08-03 20:01:00 -07:00
eisa
extcon
firewire
firmware Char/Misc driver patches for 5.9-rc1 2020-08-05 11:43:47 -07:00
fpga
fsi
gnss
gpio This is the bulk of GPIO changes for the v5.9 kernel cycle: 2020-08-05 12:56:27 -07:00
gpu drm next for 5.9-rc1 2020-08-05 19:50:06 -07:00
greybus greybus: Use fallthrough pseudo-keyword 2020-07-29 16:58:08 +02:00
hid
hsi
hv hyperv-next for 5.9 2020-08-06 09:26:10 -07:00
hwmon hwmon updates for v5.9 2020-08-05 13:13:57 -07:00
hwspinlock
hwtracing
i2c Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
i3c
ide
idle Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
iio
infiniband Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2020-08-05 20:13:21 -07:00
input Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
interconnect Char/Misc driver patches for 5.9-rc1 2020-08-05 11:43:47 -07:00
iommu dma-mapping updates for 5.9 2020-08-04 17:29:57 -07:00
ipack
irqchip The usual boring updates from the interrupt subsystem: 2020-08-04 18:11:58 -07:00
isdn
leds LEDs changes for 5.9-rc1. 2020-08-05 19:24:27 -07:00
lightnvm
macintosh
mailbox
mcb
md for-5.9/block-merge-20200804 2020-08-05 11:12:34 -07:00
media
memory MIPS upates for v5.9 2020-08-06 10:54:07 -07:00
memstick MMC core: 2020-08-05 13:23:24 -07:00
message
mfd
misc Char/Misc driver patches for 5.9-rc1 2020-08-05 11:43:47 -07:00
mmc MMC core: 2020-08-05 13:23:24 -07:00
most
mtd Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
mux
net drivers/net/wan/lapbether: Added needed_headroom and a skb->len check 2020-08-06 17:02:41 -07:00
nfc
ntb
nubus
nvdimm for-5.9/block-20200802 2020-08-03 11:57:03 -07:00
nvme for-5.9/block-merge-20200804 2020-08-05 11:12:34 -07:00
nvmem nvmem: qcom-spmi-sdam: Enable multiple devices 2020-07-29 17:12:09 +02:00
of MIPS upates for v5.9 2020-08-06 10:54:07 -07:00
opp Merge branches 'pm-em' and 'pm-core' 2020-08-03 13:11:39 +02:00
oprofile
parisc
parport
pci Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
pcmcia
perf arm64 and cross-arch updates for 5.9: 2020-08-03 14:11:08 -07:00
phy
pinctrl This is the bulk of GPIO changes for the v5.9 kernel cycle: 2020-08-05 12:56:27 -07:00
platform MIPS upates for v5.9 2020-08-06 10:54:07 -07:00
pnp
power
powercap
pps
ps3
ptp ptp: only allow phase values lower than 1 period 2020-08-05 12:06:44 -07:00
pwm
rapidio
ras
regulator Merge remote-tracking branch 'regulator/for-5.9' into regulator-next 2020-07-30 23:27:08 +01:00
remoteproc
reset
rpmsg
rtc
s390 Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2020-08-05 20:13:21 -07:00
sbus
scsi hyperv-next for 5.9 2020-08-06 09:26:10 -07:00
sfi
sh
siox
slimbus
soc ARM: SoC driver updates for v5.9 2020-08-03 19:30:59 -07:00
soundwire
spi Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
spmi
ssb Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2020-08-05 20:13:21 -07:00
staging Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2020-08-05 20:13:21 -07:00
target
tc
tee
thermal Merge branches 'pm-em' and 'pm-core' 2020-08-03 13:11:39 +02:00
thunderbolt
tty Printk changes for 5.9 2020-08-04 22:22:25 -07:00
uio
usb USB/Thunderbolt patches for 5.9-rc1 2020-08-05 12:13:10 -07:00
vdpa
vfio
vhost Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
video drm next for 5.9-rc1 2020-08-05 19:50:06 -07:00
virt
virtio Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
visorbus
vlynq
vme
w1
watchdog
xen
zorro
Kconfig
Makefile