X-Git-Url: http://git.cascardo.info/?a=blobdiff_plain;f=drivers%2Fptp%2Fptp_chardev.c;h=d637c933c8a90655ffe152101dda2b9c71fd3836;hb=1e3fa0acfec677e915d7de5ac6e1f18cfa4f805b;hp=579fd65299a0cfc18b98e8e51a619e26bf82945f;hpb=395da1259ac3e3fdc70636a854c993ddb76c6169;p=cascardo%2Flinux.git diff --git a/drivers/ptp/ptp_chardev.c b/drivers/ptp/ptp_chardev.c index 579fd65299a0..d637c933c8a9 100644 --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -208,14 +208,10 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg) break; case PTP_SYS_OFFSET: - sysoff = kmalloc(sizeof(*sysoff), GFP_KERNEL); - if (!sysoff) { - err = -ENOMEM; - break; - } - if (copy_from_user(sysoff, (void __user *)arg, - sizeof(*sysoff))) { - err = -EFAULT; + sysoff = memdup_user((void __user *)arg, sizeof(*sysoff)); + if (IS_ERR(sysoff)) { + err = PTR_ERR(sysoff); + sysoff = NULL; break; } if (sysoff->n_samples > PTP_MAX_SAMPLES) {