Files
odroid-linux/include/linux
Girish Moodalbail dea6e19f4e tap: reference to KVA of an unloaded module causes kernel panic
The commit 9a393b5d59 ("tap: tap as an independent module") created a
separate tap module that implements tap functionality and exports
interfaces that will be used by macvtap and ipvtap modules to create
create respective tap devices.

However, that patch introduced a regression wherein the modules macvtap
and ipvtap can be removed (through modprobe -r) while there are
applications using the respective /dev/tapX devices. These applications
cause kernel to hold reference to /dev/tapX through 'struct cdev
macvtap_cdev' and 'struct cdev ipvtap_dev' defined in macvtap and ipvtap
modules respectively. So,  when the application is later closed the
kernel panics because we are referencing KVA that is present in the
unloaded modules.

----------8<------- Example ----------8<----------
$ sudo ip li add name mv0 link enp7s0 type macvtap
$ sudo ip li show mv0 |grep mv0| awk -e '{print $1 $2}'
  14:mv0@enp7s0:
$ cat /dev/tap14 &
$ lsmod |egrep -i 'tap|vlan'
macvtap                16384  0
macvlan                24576  1 macvtap
tap                    24576  3 macvtap
$ sudo modprobe -r macvtap
$ fg
cat /dev/tap14
^C

<...system panics...>
BUG: unable to handle kernel paging request at ffffffffa038c500
IP: cdev_put+0xf/0x30
----------8<-----------------8<----------

The fix is to set cdev.owner to the module that creates the tap device
(either macvtap or ipvtap). With this set, the operations (in
fs/char_dev.c) on char device holds and releases the module through
cdev_get() and cdev_put() and will not allow the module to unload
prematurely.

Fixes: 9a393b5d59 (tap: tap as an independent module)
Signed-off-by: Girish Moodalbail <girish.moodalbail@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-10-28 19:17:21 +09:00
..
2017-09-06 19:56:49 +02:00
2017-10-04 10:22:55 +02:00
2017-09-01 16:35:50 -05:00
2017-06-08 18:52:36 -07:00
2017-09-08 18:26:49 -07:00
2017-07-17 17:26:14 +02:00
2017-07-06 16:24:33 -07:00
2017-07-03 16:56:28 -06:00
2017-06-05 16:59:12 +02:00
2017-04-18 20:41:12 +02:00
2017-08-30 14:40:40 +02:00
2017-09-04 00:05:22 +02:00
2017-09-04 00:06:02 +02:00
2017-06-09 11:52:07 +02:00
2017-09-05 12:53:11 +02:00
2017-08-24 13:23:03 -07:00
2017-07-17 13:42:48 +02:00
2017-08-03 19:09:26 -07:00
2017-08-01 17:33:02 +02:00
2017-08-07 17:22:14 +02:00
2017-04-27 05:13:04 -04:00
2017-07-07 20:09:10 -04:00
2017-03-21 10:15:47 +02:00
2017-09-08 18:26:46 -07:00
2017-05-18 10:07:40 -04:00
2017-06-21 14:37:12 -04:00
2017-07-10 16:32:34 -07:00
2017-08-15 18:23:52 +02:00
2017-08-14 13:33:39 -07:00
2017-05-03 15:52:10 -07:00
2017-08-17 15:33:39 -04:00
2017-02-24 17:46:57 -08:00
2017-08-28 20:51:22 +02:00
2017-09-07 11:53:11 +02:00
2017-08-18 15:32:01 -07:00
2017-04-24 14:30:46 -04:00
2017-07-13 16:00:15 -04:00
2017-08-20 13:04:12 -04:00
2017-07-06 11:30:07 -04:00
2017-07-25 18:05:25 +02:00
2017-09-25 08:56:05 -06:00
2017-05-26 10:10:37 +02:00
2017-09-06 17:27:26 -07:00
2017-08-06 20:55:29 -07:00
2017-08-06 20:55:29 -07:00
2017-08-21 12:47:31 -07:00
2017-09-08 18:26:47 -07:00
2017-08-16 16:28:47 -07:00
2017-06-29 10:48:57 +01:00
2017-08-24 16:34:51 +02:00
2017-07-06 16:24:30 -07:00
2017-08-16 16:28:47 -07:00
2017-08-03 21:37:29 -07:00
2017-06-01 14:53:04 -04:00
2017-09-11 12:29:41 -04:00
2017-09-15 16:57:10 +02:00
2017-08-28 16:15:42 +02:00
2017-07-24 17:50:37 +02:00
2017-05-09 16:43:22 +03:00
2017-09-08 18:26:48 -07:00
2017-08-31 18:50:14 +02:00
2017-09-05 06:34:17 -07:00
2017-08-15 09:02:07 -07:00
2017-08-15 09:02:08 -07:00