lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <53525ac0-1632-1a49-5c80-9ed2aa0012e0@kaspersky.com>
Date:   Mon, 15 Feb 2021 12:11:53 +0300
From:   Arseny Krasnov <arseny.krasnov@...persky.com>
To:     Stefano Garzarella <sgarzare@...hat.com>
CC:     Stefan Hajnoczi <stefanha@...hat.com>,
        "Michael S. Tsirkin" <mst@...hat.com>,
        Jason Wang <jasowang@...hat.com>,
        "David S. Miller" <davem@...emloft.net>,
        Jakub Kicinski <kuba@...nel.org>,
        Jorgen Hansen <jhansen@...are.com>,
        Colin Ian King <colin.king@...onical.com>,
        Andra Paraschiv <andraprs@...zon.com>,
        Jeff Vander Stoep <jeffv@...gle.com>,
        "kvm@...r.kernel.org" <kvm@...r.kernel.org>,
        "virtualization@...ts.linux-foundation.org" 
        <virtualization@...ts.linux-foundation.org>,
        "netdev@...r.kernel.org" <netdev@...r.kernel.org>,
        "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
        "stsp2@...dex.ru" <stsp2@...dex.ru>,
        "oxffffaa@...il.com" <oxffffaa@...il.com>
Subject: Re: [RFC PATCH v4 07/17] af_vsock: rest of SEQPACKET support


On 11.02.2021 15:27, Stefano Garzarella wrote:
> On Sun, Feb 07, 2021 at 06:16:12PM +0300, Arseny Krasnov wrote:
>> This does rest of SOCK_SEQPACKET support:
>> 1) Adds socket ops for SEQPACKET type.
>> 2) Allows to create socket with SEQPACKET type.
>>
>> Signed-off-by: Arseny Krasnov <arseny.krasnov@...persky.com>
>> ---
>> net/vmw_vsock/af_vsock.c | 37 ++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 36 insertions(+), 1 deletion(-)
>>
>> diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
>> index a033d3340ac4..c77998a14018 100644
>> --- a/net/vmw_vsock/af_vsock.c
>> +++ b/net/vmw_vsock/af_vsock.c
>> @@ -452,6 +452,7 @@ int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk)
>> 		new_transport = transport_dgram;
>> 		break;
>> 	case SOCK_STREAM:
>> +	case SOCK_SEQPACKET:
>> 		if (vsock_use_local_transport(remote_cid))
>> 			new_transport = transport_local;
>> 		else if (remote_cid <= VMADDR_CID_HOST || !transport_h2g ||
>> @@ -459,6 +460,15 @@ int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk)
>> 			new_transport = transport_g2h;
>> 		else
>> 			new_transport = transport_h2g;
>> +
>> +		if (sk->sk_type == SOCK_SEQPACKET) {
>> +			if (!new_transport ||
>> +			    !new_transport->seqpacket_seq_send_len ||
>> +			    !new_transport->seqpacket_seq_send_eor ||
>> +			    !new_transport->seqpacket_seq_get_len ||
>> +			    !new_transport->seqpacket_dequeue)
>> +				return -ESOCKTNOSUPPORT;
>> +		}
> Maybe we should move this check after the try_module_get() call, since 
> the memory pointed by 'new_transport' pointer can be deallocated in the 
> meantime.
>
> Also, if the socket had a transport before, we should deassign it before 
> returning an error.

I think previous transport is deassigned immediately after this

'switch()' on sk->sk_type:

if (vsk->transport) {

    ...

    vsock_deassign_transport(vsk);

}


Ok, check will be moved after 'try_module_get()'.

>
>> 		break;
>> 	default:
>> 		return -ESOCKTNOSUPPORT;
>> @@ -684,6 +694,7 @@ static int __vsock_bind(struct sock *sk, struct sockaddr_vm *addr)
>>
>> 	switch (sk->sk_socket->type) {
>> 	case SOCK_STREAM:
>> +	case SOCK_SEQPACKET:
>> 		spin_lock_bh(&vsock_table_lock);
>> 		retval = __vsock_bind_connectible(vsk, addr);
>> 		spin_unlock_bh(&vsock_table_lock);
>> @@ -769,7 +780,7 @@ static struct sock *__vsock_create(struct net *net,
>>
>> static bool sock_type_connectible(u16 type)
>> {
>> -	return type == SOCK_STREAM;
>> +	return (type == SOCK_STREAM) || (type == SOCK_SEQPACKET);
>> }
>>
>> static void __vsock_release(struct sock *sk, int level)
>> @@ -2199,6 +2210,27 @@ static const struct proto_ops vsock_stream_ops = {
>> 	.sendpage = sock_no_sendpage,
>> };
>>
>> +static const struct proto_ops vsock_seqpacket_ops = {
>> +	.family = PF_VSOCK,
>> +	.owner = THIS_MODULE,
>> +	.release = vsock_release,
>> +	.bind = vsock_bind,
>> +	.connect = vsock_connect,
>> +	.socketpair = sock_no_socketpair,
>> +	.accept = vsock_accept,
>> +	.getname = vsock_getname,
>> +	.poll = vsock_poll,
>> +	.ioctl = sock_no_ioctl,
>> +	.listen = vsock_listen,
>> +	.shutdown = vsock_shutdown,
>> +	.setsockopt = vsock_connectible_setsockopt,
>> +	.getsockopt = vsock_connectible_getsockopt,
>> +	.sendmsg = vsock_connectible_sendmsg,
>> +	.recvmsg = vsock_connectible_recvmsg,
>> +	.mmap = sock_no_mmap,
>> +	.sendpage = sock_no_sendpage,
>> +};
>> +
>> static int vsock_create(struct net *net, struct socket *sock,
>> 			int protocol, int kern)
>> {
>> @@ -2219,6 +2251,9 @@ static int vsock_create(struct net *net, struct socket *sock,
>> 	case SOCK_STREAM:
>> 		sock->ops = &vsock_stream_ops;
>> 		break;
>> +	case SOCK_SEQPACKET:
>> +		sock->ops = &vsock_seqpacket_ops;
>> +		break;
>> 	default:
>> 		return -ESOCKTNOSUPPORT;
>> 	}
>> -- 
>> 2.25.1
>>
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ