Whamcloud - gitweb
LU-11798 grant: prevent overflow of o_undirty 48/33948/10
authorAlex Zhuravlev <bzzz@whamcloud.com>
Wed, 2 Jan 2019 18:11:29 +0000 (10:11 -0800)
committerOleg Drokin <green@whamcloud.com>
Mon, 1 Apr 2019 07:22:07 +0000 (07:22 +0000)
commitd6f5219162116778e49865d83724276b17b9ce3a
tree779300070fad656b02fde7066668442c4a9b0e72
parentf9e5224fbb60bb8b44753b7be10cb06108627f89
LU-11798 grant: prevent overflow of o_undirty

tgt_grant_inflate() returns a u64, and if tgd_blockbits and val are
large enough, can return a value >= 2^32.  tgt_grant_incoming()
assigns oa->o_undirty the returned value.  Since o_undirty is u32, it
can overflow.

This occurs with Lustre clients < 2.10 and a ZFS backend when the zfs
"recordsize" > 128k (the default).

In tgt_grant_inflate(), check the returned value and prevent o_undirty
from being assigned a value greater than 2^30.

Change-Id: I75b9065a524238df2d582e640418fdfa2f1e9a72
Signed-off-by: Alexey Zhuravlev <bzzz@whamcloud.com>
Signed-off-by: Olaf Faaland <faaland1@llnl.gov>
Reviewed-on: https://review.whamcloud.com/33948
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Jenkins
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/osc/osc_request.c
lustre/target/tgt_grant.c