All of lore.kernel.org
 help / color / mirror / Atom feed
From: Saeed Mahameed <saeed@kernel.org>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Arnd Bergmann <arnd@arndb.de>, Jason Gunthorpe <jgg@nvidia.com>,
	Leon Romanovsky <leonro@nvidia.com>, Jiri Pirko <jiri@nvidia.com>,
	Leonid Bloch <lbloch@nvidia.com>,
	Itay Avraham <itayavr@nvidia.com>,
	Jakub Kicinski <kuba@kernel.org>,
	linux-kernel@vger.kernel.org, Saeed Mahameed <saeedm@nvidia.com>
Subject: Re: [PATCH V3 3/5] misc: mlx5ctl: Add info ioctl
Date: Mon, 27 Nov 2023 12:39:22 -0800	[thread overview]
Message-ID: <ZWT-elg2hzX7s7B4@x130> (raw)
In-Reply-To: <2023112722-imitate-impromptu-c9a7@gregkh>

On 27 Nov 19:09, Greg Kroah-Hartman wrote:
>On Mon, Nov 20, 2023 at 11:06:17PM -0800, Saeed Mahameed wrote:
>> +static int mlx5ctl_info_ioctl(struct file *file,
>> +			      struct mlx5ctl_info __user *arg,
>> +			      size_t usize)
>> +{
>> +	struct mlx5ctl_fd *mfd = file->private_data;
>> +	struct mlx5ctl_dev *mcdev = mfd->mcdev;
>> +	struct mlx5_core_dev *mdev = mcdev->mdev;
>> +	struct mlx5ctl_info *info;
>> +	size_t ksize = 0;
>> +	int err = 0;
>> +
>> +	ksize = max(sizeof(struct mlx5ctl_info), usize);
>
>Why / How can usize be larger than the structure size and you still want
>to allocate a memory chunk that big?  Shouldn't the size always match?
>

new user-space old kernel, the driver would allocate the usiae and make
sure to clear all the buffer with 0's, then fill in what the kernel
understands and send the whole buffer back to user with trailer always
zeroed out.

>And what if it's too small?
>

Too small means old user new kernel, the kernel will honor that and only
fill in what the user understands.

>> +	info = kzalloc(ksize, GFP_KERNEL_ACCOUNT);
>
>Why account as it will go away almost instantly?
>

Will change that back to GFP_KERNEL.

>> +	if (!info)
>> +		return -ENOMEM;
>> +
>> +	info->size = sizeof(struct mlx5ctl_info);
>> +
>> +	info->dev_uctx_cap = MLX5_CAP_GEN(mdev, uctx_cap);
>> +	info->uctx_cap = mfd->uctx_cap;
>> +	info->uctx_uid = mfd->uctx_uid;
>> +	info->ucap = mfd->ucap;
>> +
>> +	strscpy(info->devname, dev_name(&mdev->pdev->dev),
>> +		sizeof(info->devname));
>> +
>> +	if (copy_to_user(arg, info, usize))
>> +		err = -EFAULT;
>
>So if usize is smaller than the structure you don't copy it all?
>
>What am I missing here?
>

We copy back to user as much data as they expect, newer kernel can have
extended functionality and we want to allow expanding the ioctl structs in
the future while keeping support for old user, so new kernel would honor
old user and copy only the size the user expects.

>> +
>> +	kfree(info);
>> +	return err;
>> +}
>> +
>> +static long mlx5ctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
>> +{
>> +	struct mlx5ctl_fd *mfd = file->private_data;
>> +	struct mlx5ctl_dev *mcdev = mfd->mcdev;
>> +	void __user *argp = (void __user *)arg;
>> +	size_t size = _IOC_SIZE(cmd);
>> +	int err = 0;
>> +
>> +	if (!capable(CAP_SYS_ADMIN))
>> +		return -EPERM;
>> +
>> +	mlx5ctl_dbg(mcdev, "ioctl 0x%x type/nr: %d/%d size: %d DIR:%d\n", cmd,
>> +		    _IOC_TYPE(cmd), _IOC_NR(cmd), _IOC_SIZE(cmd), _IOC_DIR(cmd));
>> +
>> +	down_read(&mcdev->rw_lock);
>> +	if (!mcdev->mdev) {
>> +		err = -ENODEV;
>> +		goto unlock;
>> +	}
>> +
>> +	switch (cmd) {
>> +	case MLX5CTL_IOCTL_INFO:
>> +		err = mlx5ctl_info_ioctl(file, argp, size);
>> +		break;
>> +
>> +	default:
>> +		mlx5ctl_dbg(mcdev, "Unknown ioctl %x\n", cmd);
>> +		err = -ENOIOCTLCMD;
>
>-ENOTTY is the correct error.
>
>> --- /dev/null
>> +++ b/include/uapi/misc/mlx5ctl.h
>> @@ -0,0 +1,24 @@
>> +/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 WITH Linux-syscall-note */
>> +/* Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */
>> +
>> +#ifndef __MLX5CTL_IOCTL_H__
>> +#define __MLX5CTL_IOCTL_H__
>> +
>> +struct mlx5ctl_info {
>> +	__aligned_u64 flags;
>
>Is this used?
>

no, not yet, but it is good for future extendibility and compatibility
checking.

>> +	__u32 size;
>> +	__u8 devname[64]; /* underlaying ConnectX device */
>
>64 should be a define somewhere, right?  And why 64?
>

It is usually the kobj->name of the underlying device, I will have to
define this in the uAPI. 64 seemed large enough, any other suggestion ? 

This field is informational only for the user to have an idea which is the
underlying physical device, it's ok if in odd situation the name has to be
truncated to fit into the uAPI buffer.

>> +	__u16 uctx_uid; /* current process allocated UCTX UID */
>> +	__u16 reserved1;
>
>Where is this checked to be always 0?  Well it's a read so I guess where
>is the documentation saying it will always be set to 0?
>

I forgot to add the checks in the info ioctl path, will add that.
Isn't it an unwritten rule that reserved fields has to be always 0 ?
Do I really need to document this ?

>> +	__u32 uctx_cap; /* current process effective UCTX cap */
>> +	__u32 dev_uctx_cap; /* device's UCTX capabilities */
>> +	__u32 ucap; /* process user capability */
>> +	__u32 reserved2;
>
>Same here.
>
>And why reserve anything?  What does that help with?
>

struct alignment and explicit padding.

>thanks,
>
>greg k-h

  reply	other threads:[~2023-11-27 20:39 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-21  7:06 [PATCH V3 0/5] mlx5 ConnectX control misc driver Saeed Mahameed
2023-11-21  7:06 ` [PATCH V3 1/5] mlx5: Add aux dev for ctl interface Saeed Mahameed
2023-11-21  7:06 ` [PATCH V3 2/5] misc: mlx5ctl: Add mlx5ctl misc driver Saeed Mahameed
2023-11-27 13:36   ` Greg Kroah-Hartman
2023-11-27 14:40     ` Jason Gunthorpe
2023-11-27 15:51       ` Greg Kroah-Hartman
2023-11-27 16:17         ` Jason Gunthorpe
2023-11-27 18:27           ` Greg Kroah-Hartman
2023-11-27 19:26             ` Saeed Mahameed
2023-11-28  0:07               ` Jakub Kicinski
2023-11-28  4:46                 ` David Ahern
2023-11-28 14:53                   ` Jakub Kicinski
2023-11-28 16:24                     ` Jason Gunthorpe
2023-11-28 16:44                       ` Jakub Kicinski
2023-11-28 17:52                         ` Jason Gunthorpe
2023-11-28 18:33                           ` Jakub Kicinski
2023-11-28 19:55                             ` Saeed Mahameed
2023-11-28 20:10                             ` Saeed Mahameed
2023-11-29  9:08                               ` Greg Kroah-Hartman
2023-12-04 21:37                                 ` Aron Silverton
2023-12-05  2:52                                   ` Jakub Kicinski
2023-12-05 17:11                                     ` Aron Silverton
2023-12-06  4:48                                       ` Jakub Kicinski
2023-12-07 15:54                                         ` David Ahern
2023-12-07 16:20                                           ` Jakub Kicinski
2023-12-07 16:41                                         ` Aron Silverton
2023-12-07 17:23                                           ` Jakub Kicinski
2023-12-07 18:06                                             ` Aron Silverton
2023-12-07 19:02                                               ` Saeed Mahameed
2023-12-08  5:29                                                 ` Greg Kroah-Hartman
2023-12-08 13:34                                                   ` Jason Gunthorpe
2023-12-08  5:27                                               ` Greg Kroah-Hartman
2023-12-08 12:52                                                 ` Jason Gunthorpe
2023-12-07 18:54                                           ` Saeed Mahameed
2023-12-13 16:55                                             ` Christoph Hellwig
2023-11-28 19:31                         ` Saeed Mahameed
2023-11-28 16:52                     ` David Ahern
2023-11-27 18:59   ` Greg Kroah-Hartman
2023-11-29  9:08     ` Saeed Mahameed
2023-11-29  9:20       ` Greg Kroah-Hartman
2023-11-29 13:02         ` Jason Gunthorpe
2023-11-29 15:41           ` Greg Kroah-Hartman
2023-11-29 18:07             ` Jason Gunthorpe
2023-11-21  7:06 ` [PATCH V3 3/5] misc: mlx5ctl: Add info ioctl Saeed Mahameed
2023-11-27 19:09   ` Greg Kroah-Hartman
2023-11-27 20:39     ` Saeed Mahameed [this message]
2023-11-28  9:13       ` Greg Kroah-Hartman
2023-11-29  8:53         ` Saeed Mahameed
2023-11-21  7:06 ` [PATCH V3 4/5] misc: mlx5ctl: Add command rpc ioctl Saeed Mahameed
2023-11-21  7:06 ` [PATCH V3 5/5] misc: mlx5ctl: Add umem reg/unreg ioctl Saeed Mahameed
2023-11-21 20:44   ` Jakub Kicinski
2023-11-21 21:04     ` Saeed Mahameed
2023-11-21 22:10       ` Jakub Kicinski
2023-11-21 22:52         ` Saeed Mahameed
2023-11-21 22:18       ` David Ahern
2023-11-21 22:46         ` Saeed Mahameed
2023-11-21 23:46     ` Jason Gunthorpe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZWT-elg2hzX7s7B4@x130 \
    --to=saeed@kernel.org \
    --cc=arnd@arndb.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=itayavr@nvidia.com \
    --cc=jgg@nvidia.com \
    --cc=jiri@nvidia.com \
    --cc=kuba@kernel.org \
    --cc=lbloch@nvidia.com \
    --cc=leonro@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=saeedm@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.