diff options
| author | Mark Johnston <markj@FreeBSD.org> | 2019-02-19 21:33:02 +0000 |
|---|---|---|
| committer | Mark Johnston <markj@FreeBSD.org> | 2019-02-19 21:33:02 +0000 |
| commit | d4fbe32c65682cb0d808157569111c51d59ac905 (patch) | |
| tree | 8959efb1d8c2f6b5b0effd94cd58e7e223c669de /sys/geom/geom_dev.c | |
| parent | 94b793c49790cdb4f945fe909c65d4c89fe71f16 (diff) | |
Notes
Diffstat (limited to 'sys/geom/geom_dev.c')
| -rw-r--r-- | sys/geom/geom_dev.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/sys/geom/geom_dev.c b/sys/geom/geom_dev.c index 14e3d1525c47..95126f19a4d3 100644 --- a/sys/geom/geom_dev.c +++ b/sys/geom/geom_dev.c @@ -677,8 +677,10 @@ g_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread alloc_size = 0; if (zone_args->zone_cmd == DISK_ZONE_REPORT_ZONES) { - rep = &zone_args->zone_params.report; +#define MAXENTRIES (MAXPHYS / sizeof(struct disk_zone_rep_entry)) + if (rep->entries_allocated > MAXENTRIES) + rep->entries_allocated = MAXENTRIES; alloc_size = rep->entries_allocated * sizeof(struct disk_zone_rep_entry); if (alloc_size != 0) @@ -688,15 +690,11 @@ g_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread rep->entries = new_entries; } error = g_io_zonecmd(zone_args, cp); - if ((zone_args->zone_cmd == DISK_ZONE_REPORT_ZONES) - && (alloc_size != 0) - && (error == 0)) { + if (zone_args->zone_cmd == DISK_ZONE_REPORT_ZONES && + alloc_size != 0 && error == 0) error = copyout(new_entries, old_entries, alloc_size); - } - if ((old_entries != NULL) - && (rep != NULL)) + if (old_entries != NULL && rep != NULL) rep->entries = old_entries; - if (new_entries != NULL) g_free(new_entries); break; |
