mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 02:50:43 +00:00
switchtec: Fix SWITCHTEC_IOCTL_EVENT_IDX_ALL flags overwrite
[ Upstream commite4a7dca5de
] In the ioctl_event_ctl() SWITCHTEC_IOCTL_EVENT_IDX_ALL case, we call event_ctl() several times with the same "ctl" struct. Each call clobbers ctl.flags, which leads to the problem that we may not actually enable or disable all events as the user requested. Preserve the event flag value with a temporary variable. Fixes:52eabba5bc
("switchtec: Add IOCTLs to the Switchtec driver") Signed-off-by: Joey Zhang <joey.zhang@microchip.com> Signed-off-by: Wesley Sheng <wesley.sheng@microchip.com> [bhelgaas: changelog] Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Logan Gunthorpe <logang@deltatee.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
285187e296
commit
cf96f234ef
1 changed files with 3 additions and 0 deletions
|
@ -1064,6 +1064,7 @@ static int ioctl_event_ctl(struct switchtec_dev *stdev,
|
|||
{
|
||||
int ret;
|
||||
int nr_idxs;
|
||||
unsigned int event_flags;
|
||||
struct switchtec_ioctl_event_ctl ctl;
|
||||
|
||||
if (copy_from_user(&ctl, uctl, sizeof(ctl)))
|
||||
|
@ -1085,7 +1086,9 @@ static int ioctl_event_ctl(struct switchtec_dev *stdev,
|
|||
else
|
||||
return -EINVAL;
|
||||
|
||||
event_flags = ctl.flags;
|
||||
for (ctl.index = 0; ctl.index < nr_idxs; ctl.index++) {
|
||||
ctl.flags = event_flags;
|
||||
ret = event_ctl(stdev, &ctl);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
|
Loading…
Reference in a new issue