OSDN Git Service

IB/mlx5: fix uaccess beyond "count" in debugfs read/write handlers
authorJann Horn <jannh@google.com>
Fri, 6 Jul 2018 20:48:03 +0000 (22:48 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 9 Jul 2018 19:15:12 +0000 (13:15 -0600)
commit60e6627f12a78203a093ca05b7bca15627747d81
tree76dcde09c85d2f3e1ec739140172713546b2d115
parent222c7b1fd4dcc596e4a21dc93f49d9c976f7e314
IB/mlx5: fix uaccess beyond "count" in debugfs read/write handlers

In general, accessing userspace memory beyond the length of the supplied
buffer in VFS read/write handlers can lead to both kernel memory corruption
(via kernel_read()/kernel_write(), which can e.g. be triggered via
sys_splice()) and privilege escalation inside userspace.

In this case, the affected files are in debugfs (and should therefore only
be accessible to root), and the read handlers check that *pos is zero
(meaning that at least sys_splice() can't trigger kernel memory
corruption). Because of the root requirement, this is not a security fix,
but rather a cleanup.

For the read handlers, fix it by using simple_read_from_buffer() instead
of custom logic. Add min() calls to the write handlers.

Fixes: 4a2da0b8c078 ("IB/mlx5: Add debug control parameters for congestion control")
Fixes: e126ba97dba9 ("mlx5: Add driver for Mellanox Connect-IB adapters")
Signed-off-by: Jann Horn <jannh@google.com>
Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/mlx5/cong.c
drivers/infiniband/hw/mlx5/mr.c