Leon Romanovsky
d0e312fe3d
RDMA/netlink: Fix general protection fault
...
The RDMA netlink core code checks validity of messages by ensuring
that type and operand are in range. It works well for almost all
clients except NLDEV, which has cb_table less than number of operands.
Request to access such operand will trigger the following kernel panic.
This patch updates all places where cb_table is declared for the
consistency, but only NLDEV is actually need it.
general protection fault: 0000 [#1 ] SMP DEBUG_PAGEALLOC KASAN
Modules linked in:
CPU: 0 PID: 522 Comm: syz-executor6 Not tainted 4.13.0+ #4
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5-0-ge51488c-20140602_164612-nilsson.home.kraxel.org 04/01/2014
task: ffff8800657799c0 task.stack: ffff8800695d000
RIP: 0010:rdma_nl_rcv_msg+0x13a/0x4c0
RSP: 0018:ffff8800695d7838 EFLAGS: 00010207
RAX: dffffc0000000000 RBX: 1ffff1000d2baf0b RCX: 00000000704ff4d7
RDX: 0000000000000000 RSI: ffffffff81ddb03c RDI: 00000003827fa6bc
RBP: ffff8800695d7900 R08: ffffffff82ec0578 R09: 0000000000000000
R10: ffff8800695d7900 R11: 0000000000000001 R12: 000000000000001c
R13: ffff880069d31e00 R14: 00000000ffffffff R15: ffff880069d357c0
FS: 00007fee6acb8700(0000) GS:ffff88006ca00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00000000201a9000 CR3: 0000000059766000 CR4: 00000000000006b0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
? rdma_nl_multicast+0x80/0x80
rdma_nl_rcv+0x36b/0x4d0
? ibnl_put_attr+0xc0/0xc0
netlink_unicast+0x4bd/0x6d0
? netlink_sendskb+0x50/0x50
? drop_futex_key_refs.isra.4+0x68/0xb0
netlink_sendmsg+0x9ab/0xbd0
? nlmsg_notify+0x140/0x140
? wake_up_q+0xa1/0xf0
? drop_futex_key_refs.isra.4+0x68/0xb0
sock_sendmsg+0x88/0xd0
sock_write_iter+0x228/0x3c0
? sock_sendmsg+0xd0/0xd0
? do_futex+0x3e5/0xb20
? iov_iter_init+0xaf/0x1d0
__vfs_write+0x46e/0x640
? sched_clock_cpu+0x1b/0x190
? __vfs_read+0x620/0x620
? __fget+0x23a/0x390
? rw_verify_area+0xca/0x290
vfs_write+0x192/0x490
SyS_write+0xde/0x1c0
? SyS_read+0x1c0/0x1c0
? trace_hardirqs_on_thunk+0x1a/0x1c
entry_SYSCALL_64_fastpath+0x18/0xad
RIP: 0033:0x7fee6a74a219
RSP: 002b:00007fee6acb7d58 EFLAGS: 00000212 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 0000000000638000 RCX: 00007fee6a74a219
RDX: 0000000000000078 RSI: 0000000020141000 RDI: 0000000000000006
RBP: 0000000000000046 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000212 R12: ffff8800695d7f98
R13: 0000000020141000 R14: 0000000000000006 R15: 00000000ffffffff
Code: d6 48 b8 00 00 00 00 00 fc ff df 66 41 81 e4 ff 03 44 8d 72 ff 4a 8d 3c b5 c0 a6 7f 82 44 89 b5 4c ff ff ff 48 89 f9 48 c1 e9 03 <0f> b6 0c 01 48 89 f8 83 e0 07 83 c0 03 38 c8 7c 08 84 c9 0f 85
RIP: rdma_nl_rcv_msg+0x13a/0x4c0 RSP: ffff8800695d7838
---[ end trace ba085d123959c8ec ]---
Kernel panic - not syncing: Fatal exception
Cc: syzkaller <syzkaller@googlegroups.com >
Fixes: b4c598a67e ("RDMA/netlink: Implement nldev device dumpit calback")
Reviewed-by: Mark Bloch <markb@mellanox.com >
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
Signed-off-by: Doug Ledford <dledford@redhat.com >
2017-12-07 15:28:07 -05:00
Leon Romanovsky
287683d027
RDMA/nldev: Enforce device index check for port callback
...
IB device index is nldev's handler and it should be checked always.
Fixes: c3f66f7b00 ("RDMA/netlink: Implement nldev port doit callback")
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
Acked-by: Doug Ledford <dledford@redhat.com >
[ Applying directly, since Doug fried his SSD's and is rebuilding - Linus ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-10-31 12:12:55 -07:00
Jason Gunthorpe
e3bf14bdc1
rdma: Autoload netlink client modules
...
If a message comes in and we do not have the client in the table, then
try to load the module supplying that client using MODULE_ALIAS to find
it.
This duplicates the scheme seen in other netlink muxes (eg nfnetlink).
Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com >
Reviewed-by: Leon Romanovsky <leonro@mellanox.com >
Signed-off-by: Doug Ledford <dledford@redhat.com >
2017-08-22 17:04:22 -04:00
Leon Romanovsky
1bb77b8c1d
RDMA/netlink: Export node_type
...
Add ability to get node_type for RDAM netlink users.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
2017-08-10 13:28:14 +03:00
Leon Romanovsky
5654e49db0
RDMA/netlink: Provide port state and physical link state
...
Add port state and physical link state to the users of RDMA netlink.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
2017-08-10 13:28:13 +03:00
Leon Romanovsky
34840fea11
RDMA/netlink: Export LID mask control (LMC)
...
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
2017-08-10 13:28:13 +03:00
Leon Romanovsky
80a06dd36f
RDMA/netink: Export lids and sm_lids
...
According to the IB specification, the LID and SM_LID
are 16-bit wide, but to support OmniPath users, export
it as 32-bit value from the beginning.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
2017-08-10 13:28:12 +03:00
Leon Romanovsky
12026fbba6
RDMA/netlink: Advertise IB subnet prefix
...
Add IB subnet prefix to the port properties exported
by RDMA netlink.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
2017-08-10 13:28:12 +03:00
Leon Romanovsky
1aaff896ca
RDMA/netlink: Export node_guid and sys_image_guid
...
Add Node GUID and system image GUID to the device properties
exported by RDMA netlink, to be used by RDMAtool.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
2017-08-10 13:28:11 +03:00
Leon Romanovsky
8621a7e3c1
RDMA/netlink: Export FW version
...
Add FW version to the device properties exported
by RDMA netlink, to be used by RDMAtool.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
2017-08-10 13:28:11 +03:00
Leon Romanovsky
ac50525374
RDMA/netlink: Expose device and port capability masks
...
The port capability mask is exposed to user space via sysfs interface,
while device capabilities are available for verbs only.
This patch provides those capabilities through netlink interface.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
Reviewed-by: Steve Wise <swise@opengridcomputing.com >
2017-08-10 13:28:10 +03:00
Leon Romanovsky
c3f66f7b00
RDMA/netlink: Implement nldev port doit callback
...
Provide ability to get specific to device and port information.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
Reviewed-by: Steve Wise <swise@opengridcomputing.com >
2017-08-10 13:28:09 +03:00
Leon Romanovsky
7d02f605f0
RDMA/netlink: Add nldev port dumpit implementation
...
This patch implements the query interface to get all
ports data for the specific device.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
Reviewed-by: Steve Wise <swise@opengridcomputing.com >
2017-08-10 13:28:09 +03:00
Leon Romanovsky
e5c9469efc
RDMA/netlink: Add nldev device doit implementation
...
Provide ability to query specific device.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
Reviewed-by: Steve Wise <swise@opengridcomputing.com >
2017-08-10 13:28:08 +03:00
Leon Romanovsky
b4c598a67e
RDMA/netlink: Implement nldev device dumpit calback
...
This patch adds the ability to return all available devices
together with their properties.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
Reviewed-by: Steve Wise <swise@opengridcomputing.com >
2017-08-10 13:28:08 +03:00
Leon Romanovsky
6c80b41abe
RDMA/netlink: Add nldev initialization flows
...
Add nldev init and exit flows to the RDMA/core.
Signed-off-by: Leon Romanovsky <leonro@mellanox.com >
Reviewed-by: Steve Wise <swise@opengridcomputing.com >
2017-08-10 13:28:07 +03:00