s390/ipl: fix out of bounds access in scpdata_write
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Fri, 6 Nov 2015 08:58:06 +0000 (09:58 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 11 Nov 2015 08:07:06 +0000 (09:07 +0100)
commite0bedada3a497d0640dd5db93e7ad0735f487492
tree1fa92c6b1d86812f47d80a593941d8d8abdc1805
parent52d43d8184b1840c7cf6136724223585f51a1074
s390/ipl: fix out of bounds access in scpdata_write

The input buffer in reipl_fcp_scpdata_write is accessed out of bounds
when an offset is specified. The problem is that the offset refers to
the data we should write to and not to the buffer we read from.

So instead of
        memcpy(scp_data, buf + off, count);
we could just do
        memcpy(scp_data + off, buf, count);

However we not only modify the data but also store its length. For this to
work we'd need to remember a state per open FH. Since that's not possible
with sysfs callbacks let's just fail when an offset is specified.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Acked-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/ipl.c