Whamcloud - gitweb
LU-11798 grant: prevent overflow of o_undirty 61/34561/2
authorAlex Zhuravlev <bzzz@whamcloud.com>
Wed, 2 Jan 2019 18:11:29 +0000 (10:11 -0800)
committerOleg Drokin <green@whamcloud.com>
Mon, 8 Apr 2019 06:28:03 +0000 (06:28 +0000)
commite13cc954a776f6dec06f01299a55a55018ae6235
treeae3e6336defbde37f861449f12df8b0cfd75f2ec
parent4fd6fbbd0f0a0f45cd41b560c4711002e86747b6
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.

Lustre-change: https://review.whamcloud.com/33948
Lustre-commit: d6f5219162116778e49865d83724276b17b9ce3a

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