Skip to content

Commit 3ed21c1

Browse files
Dan Carpentermstsirkin
authored andcommitted
vdpa: check that offsets are within bounds
In this function "c->off" is a u32 and "size" is a long. On 64bit systems if "c->off" is greater than "size" then "size - c->off" is a negative and we always return -E2BIG. But on 32bit systems the subtraction is type promoted to a high positive u32 value and basically any "c->len" is accepted. Fixes: 4c8cf31 ("vhost: introduce vDPA-based backend") Reported-by: Xie Yongji <[email protected]> Signed-off-by: Dan Carpenter <[email protected]> Link: https://lore.kernel.org/r/20211208103337.GA4047@kili Signed-off-by: Michael S. Tsirkin <[email protected]> Cc: [email protected]
1 parent ff9f9c6 commit 3ed21c1

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/vhost/vdpa.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ static int vhost_vdpa_config_validate(struct vhost_vdpa *v,
197197
struct vdpa_device *vdpa = v->vdpa;
198198
long size = vdpa->config->get_config_size(vdpa);
199199

200-
if (c->len == 0)
200+
if (c->len == 0 || c->off > size)
201201
return -EINVAL;
202202

203203
if (c->len > size - c->off)

0 commit comments

Comments
 (0)