Re: [PATCH v3 6/9] io_uring/cmd: Introduce SOCKET_URING_OP_GETSOCKOPT
From: Gabriel Krisman Bertazi <hidden>
Date: 2023-08-21 14:53:02
Also in:
bpf, io-uring, lkml
Breno Leitao [off-list ref] writes:
Hello Gabriel, On Thu, Aug 17, 2023 at 02:38:46PM -0400, Gabriel Krisman Bertazi wrote:quoted
Breno Leitao [off-list ref] writes:quoted
+#if defined(CONFIG_NET) int io_uring_cmd_sock(struct io_uring_cmd *cmd, unsigned int issue_flags) { struct socket *sock = cmd->file->private_data;@@ -189,8 +219,16 @@ int io_uring_cmd_sock(struct io_uring_cmd *cmd, unsigned int issue_flags) if (ret) return ret; return arg; + case SOCKET_URING_OP_GETSOCKOPT: + return io_uring_cmd_getsockopt(sock, cmd, issue_flags); default: return -EOPNOTSUPP; } } +#else +int io_uring_cmd_sock(struct io_uring_cmd *cmd, unsigned int issue_flags) +{ + return -EOPNOTSUPP; +} +#endif EXPORT_SYMBOL_GPL(io_uring_cmd_sock);The CONFIG_NET guards are unrelated and need to go in a separate commit. Specially because it is not only gating getsockopt, but also the already merged SOCKET_URING_OP_SIOCINQ/_OP_SIOCOUTQ.Well, so far, if CONFIG_NET is disable, and you call io_uring_cmd_getsockopt, the callbacks will be called and returned -EOPNOTSUPP.
I'm not talking about io_uring_cmd_getsockopt; that would obviously
return -EOPNOTSUPP before as well. But you are changing
io_uring_cmd_sock, which does more things:
int io_uring_cmd_sock(struct io_uring_cmd *cmd, unsigned int issue_flags)
{
[...]
if (!prot || !prot->ioctl)
return -EOPNOTSUPP;
switch (cmd->sqe->cmd_op) {
case SOCKET_URING_OP_SIOCINQ:
ret = prot->ioctl(sk, SIOCINQ, &arg);
if (ret)
return ret;
return arg;
case SOCKET_URING_OP_SIOCOUTQ:
ret = prot->ioctl(sk, SIOCOUTQ, &arg);
if (ret)
return ret;
With your patch, these two cmd_op, are now being gated by CONFIG_NET. I
think it makes sense for them to be gated by it, But it should
be in a separated change, or at least explained in your commit message.
With this new patch, it will eventually call sk_getsockopt which does not exist in the CONFIG_NET=n world. That is why I have this protection now. I.e, this `#if defined(CONFIG_NET)` is only necessary now, since it is the first time this function (io_uring_cmd_sock) will call a function that does not exist if CONFIG_NET is disabled. I can split it in a different patch, if you think it makes a difference.
-- Gabriel Krisman Bertazi