]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
s390/dasd: validate request size before building CCW/TCW request
authorStefan Weinhuber <wein@de.ibm.com>
Tue, 19 Nov 2013 13:15:57 +0000 (14:15 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 20 Nov 2013 08:04:54 +0000 (09:04 +0100)
An I/O request that does not read or write full blocks cannot be
translated into a correct CCW or TCW program and should be rejected
right away. In particular the code that creates TCW requests will not
notice this problem and create broken TCWs that will be rejected by
the hardware.

Signed-off-by: Stefan Weinhuber <wein@de.ibm.com>
Reference-ID: RQM1956

drivers/s390/block/dasd_eckd.c

index cee7e2708a1fe35359eb81cc458d939e50ad1906..95e45782692fa7bb2a89e9ec566a6a035f736381 100644 (file)
@@ -3224,6 +3224,8 @@ static struct dasd_ccw_req *dasd_eckd_build_cp(struct dasd_device *startdev,
 
        fcx_multitrack = private->features.feature[40] & 0x20;
        data_size = blk_rq_bytes(req);
+       if (data_size % blksize)
+               return ERR_PTR(-EINVAL);
        /* tpm write request add CBC data on each track boundary */
        if (rq_data_dir(req) == WRITE)
                data_size += (last_trk - first_trk) * 4;