From 7b4214534ccdf6f8aa6e566d7501aab328c72e84 Mon Sep 17 00:00:00 2001 From: Robert Mustacchi Date: Mon, 23 Nov 2020 14:09:18 -0800 Subject: 13324 struct dk_minfo_ext size differences trigger SSP in libfdisk Reviewed by: Jason King Reviewed by: Andy Fiddaman Reviewed by: Toomas Soome Approved by: Joshua Clulow --- usr/src/uts/common/fs/zfs/zvol.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'usr/src/uts/common/fs/zfs/zvol.c') diff --git a/usr/src/uts/common/fs/zfs/zvol.c b/usr/src/uts/common/fs/zfs/zvol.c index 55dd9a2681..57f143aa8c 100644 --- a/usr/src/uts/common/fs/zfs/zvol.c +++ b/usr/src/uts/common/fs/zfs/zvol.c @@ -1668,6 +1668,7 @@ zvol_ioctl(dev_t dev, int cmd, intptr_t arg, int flag, cred_t *cr, int *rvalp) case DKIOCGMEDIAINFOEXT: { struct dk_minfo_ext dkmext; + size_t len; bzero(&dkmext, sizeof (dkmext)); dkmext.dki_lbsize = 1U << zv->zv_min_bs; @@ -1675,7 +1676,17 @@ zvol_ioctl(dev_t dev, int cmd, intptr_t arg, int flag, cred_t *cr, int *rvalp) dkmext.dki_capacity = zv->zv_volsize >> zv->zv_min_bs; dkmext.dki_media_type = DK_UNKNOWN; mutex_exit(&zfsdev_state_lock); - if (ddi_copyout(&dkmext, (void *)arg, sizeof (dkmext), flag)) + + switch (ddi_model_convert_from(flag & FMODELS)) { + case DDI_MODEL_ILP32: + len = sizeof (struct dk_minfo_ext32); + break; + default: + len = sizeof (struct dk_minfo_ext); + break; + } + + if (ddi_copyout(&dkmext, (void *)arg, len, flag)) error = SET_ERROR(EFAULT); return (error); } -- cgit v1.2.3