On Mon Sep 30, 2024 at 3:19 PM CEST, Steffen Eiden wrote: > Add an extended List Secrets IOCTL. In contrast to the first list IOCTL > this accepts an index as the first two bytes of the provided page as an > input. This index is then taken as the index offset for the list UVC to > receive later entries for the list. > > Signed-off-by: Steffen Eiden <seiden@xxxxxxxxxxxxx> [...] > +/* The actual list(_ext) IOCTL. > + * If list_ext is true, the first two bytes of the user buffer set the starting index of the > + * list-UVC > + */ > +static int list_secrets(struct uvio_ioctl_cb *uv_ioctl, bool list_ext) > +{ > + void __user *user_buf_arg = (void __user *)uv_ioctl->argument_addr; > + u16 __user *user_index = (u16 __user *)uv_ioctl->argument_addr; > + u16 start_idx = 0; > + u8 *secrets = NULL; > + int ret; nit: These can be reordered to reverse xmas tree. > + > + if (uv_ioctl->argument_len != UVIO_LIST_SECRETS_LEN) > + return -EINVAL; > + > + BUILD_BUG_ON(UVIO_LIST_SECRETS_LEN != PAGE_SIZE); > + secrets = (u8 *)get_zeroed_page(GFP_KERNEL); > + if (!secrets) > + return -ENOMEM; > + > + // The extended call accepts an u16 index as input Comments should use /* */ > + ret = -EFAULT; > + if (list_ext) { > + if (get_user(start_idx, user_index)) > + goto err; > + } > + > + uv_list_secrets(secrets, start_idx, &uv_ioctl->uv_rc, &uv_ioctl->uv_rrc); > + > + if (copy_to_user(user_buf_arg, secrets, UVIO_LIST_SECRETS_LEN)) > + goto err; > + ret = 0; > + > +err: > + free_pages((unsigned long)secrets, 0); > + return ret; > +} [...]