netdev
[Top] [All Lists]

Re: [PATCH] linux 2.9.10-rc1: Fix oops in unix_dgram_sendmsg when using

To: Chris Wright <chrisw@xxxxxxxx>
Subject: Re: [PATCH] linux 2.9.10-rc1: Fix oops in unix_dgram_sendmsg when using SELinux and SOCK_SEQPACKET
From: Ross Kendall Axe <ross.axe@xxxxxxxxxxxxxxxx>
Date: Fri, 19 Nov 2004 03:23:50 +0000
Cc: James Morris <jmorris@xxxxxxxxxx>, netdev@xxxxxxxxxxx, Stephen Smalley <sds@xxxxxxxxxxxxxx>, lkml <linux-kernel@xxxxxxxxxxxxxxx>, "David S. Miller" <davem@xxxxxxxxxxxxx>
In-reply-to: <20041118084449.Z14339@xxxxxxxxxxxxxxxxxx>
References: <Xine.LNX.4.44.0411180257300.3144-100000@xxxxxxxxxxxxxxxxxxxxxxxx> <Xine.LNX.4.44.0411180305060.3192-100000@xxxxxxxxxxxxxxxxxxxxxxxx> <20041118084449.Z14339@xxxxxxxxxxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla Thunderbird 0.8 (X11/20040913)
Chris Wright wrote:

Why not make a unix_seq_sendmsg, which is a very small wrapper?
e.g.
static int unix_seq_sendmsg(struct kiocb *kiocb, struct socket *sock,
                            struct msghdr *msg, size_t len)
{
        struct sock *sk = sock->sk;

        if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED)
                return -ENOTCONN;
        if (msg->msg_name || msg->msg_namelen)
                return -EINVAL;
        return unix_dgram_sendmsg(kiocb, sock, msg, len);
}


-chris

Taking this idea further, couldn't we split unix_dgram_sendmsg into 2 functions, do_unix_dgram_sendmsg and do_unix_connectionless_sendmsg (and similarly for unix_stream_sendmsg), then all we'd need is:

<pseudocode>
static int do_unix_dgram_sendmsg(...);
static int do_unix_stream_sendmsg(...);
static int do_unix_connectionless_sendmsg(...);
static int do_unix_connectional_sendmsg(...);

static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock,
                              struct msghdr *msg, size_t len)
{
        return do_unix_connectionless_sendmsg(kiocb, sock, msg, len,
                                              do_unix_dgram_sendmsg);
}
static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock,
                               struct msghdr *msg, size_t len)
{
        return do_unix_connectional_sendmsg(kiocb, sock, msg, len,
                                            do_unix_stream_sendmsg);
}
static int unix_seqpacket_sendmsg(struct kiocb *kiocb, struct socket *sock,
                                  struct msghdr *msg, size_t len)
{
        return do_unix_connectional_sendmsg(kiocb, sock, msg, len,
                                            do_unix_dgram_sendmsg);
}
</pseudocode>

What do we think?

Ross

Attachment: signature.asc
Description: OpenPGP digital signature

<Prev in Thread] Current Thread [Next in Thread>