+ zones = kzalloc(sizeof(struct blk_zone) * rep.nr_zones,
+ GFP_KERNEL);
+ if (!zones)
+ return -ENOMEM;
This should use kcalloc to get us underflow checking for the user
controlled allocation size.
+ if (copy_to_user(argp, &rep, sizeof(struct blk_zone_report))) {
+ ret = -EFAULT;
+ goto out;
+ }
+
+ if (rep.nr_zones) {
+ if (copy_to_user(argp + sizeof(struct blk_zone_report), zones,
+ sizeof(struct blk_zone) * rep.nr_zones))
+ ret = -EFAULT;
+ }
We could actually do this with a single big copy_to_user. Not that
it really matters, though..
-/*
- * Zone type.
- */
-enum blk_zone_type {
- BLK_ZONE_TYPE_UNKNOWN,
- BLK_ZONE_TYPE_CONVENTIONAL,
- BLK_ZONE_TYPE_SEQWRITE_REQ,
- BLK_ZONE_TYPE_SEQWRITE_PREF,
-};
Please don't move this code around after it was added just two
patches earlier. I'd say just split adding the new blkzoned.h
uapi header into a patch of it's own and add that before the
core block code.