From: Al Viro <viro@ZenIV•linux.org.uk>
To: David Miller <davem@davemloft•net>
Cc: kaber@trash•net, netdev@vger•kernel.org,
Dmitry Tarnyagin <dmitry.tarnyagin@lockless•no>
Subject: Re: [WTF?] random test in netlink_sendmsg()
Date: Sat, 13 Dec 2014 03:25:00 +0000 [thread overview]
Message-ID: <20141213032500.GH22149@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20141212.213313.1419808296502891420.davem@davemloft.net>
On Fri, Dec 12, 2014 at 09:33:13PM -0500, David Miller wrote:
> Ok, so we just adjust the AF_PACKET check to test msg_iovlen==1 as
> well, and that takes care of that case.
AF_NETLINK, I suppose? AF_PACKET is avoiding all those contortions - they
simply do
if (po->tx_ring.pg_vec)
return tpacket_snd(po, msg);
else
return packet_snd(sock, msg, len);
IOW, if you have done PACKET_TX_RING, you get msg_iov completely ignored and
tx_ring used as data source, otherwise you get data coming from msg_iov.
For AF_NETLINK what you suggest would work, AFAICS. It's still bloody weird,
(if we want to be able to mix from-msg_iov and from-tx_ring sends on the same
socket, I'd probably go with MSG_<something> in flags), but existing userland
ABI is existing userland ABI...
So in term of msg_iter, it turns into
/* It's a really convoluted way for userland to ask for mmaped
* sendmsg(), but that's what we've got... */
if (netlink_tx_is_mmaped(sk) &&
msg->msg_iter.type == KVEC_ITER &&
msg->msg_iter.nr_segs == 1 &&
msg->msg_iter.iov->iov_base == NULL) {
err = netlink_mmap_sendmsg(sk, msg, dst_portid, dst_group,
siocb);
goto out;
}
OK, that works...
Next fun place: AF_CAIF/SOCK_SEQPACKET has sendmsg() treating NULL
msg_iov[0].iov_base as EINVAL. No idea why - without that check zero-length
sendmsg() with such msg_iov would work and non-zero-length one would
fail with EFAULT instead. And this check is just as random in case of
msg_iovlen being 0. Could CAIF folks explain what's going on there?
My preference would be to remove that check completely...
next prev parent reply other threads:[~2014-12-13 3:25 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-28 6:23 [WTF?] random test in netlink_sendmsg() Al Viro
2014-12-12 20:34 ` David Miller
2014-12-12 21:32 ` Al Viro
2014-12-12 21:50 ` Florian Westphal
2014-12-12 22:14 ` Al Viro
2014-12-12 22:20 ` Florian Westphal
2014-12-13 1:07 ` David Miller
2014-12-13 1:54 ` Al Viro
2014-12-13 2:33 ` David Miller
2014-12-13 3:25 ` Al Viro [this message]
2014-12-13 4:51 ` Al Viro
2014-12-14 4:38 ` David Miller
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=20141213032500.GH22149@ZenIV.linux.org.uk \
--to=viro@zeniv$(echo .)linux.org.uk \
--cc=davem@davemloft$(echo .)net \
--cc=dmitry.tarnyagin@lockless$(echo .)no \
--cc=kaber@trash$(echo .)net \
--cc=netdev@vger$(echo .)kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox