Message ID | 9f8cd98603274c9f6c14b72212b51f26cf0c8fb5.1497276062.git.maozy.fnst@cn.fujitsu.com |
---|---|
State | New |
Headers | show |
Mao Zhongyi <maozy.fnst@cn.fujitsu.com> writes: > In the net_socket_fd_init(), the 'default' case and comment is odd. > If @fd really was a pty, getsockopt() would fail with ENOTSOCK. If > @fd was a socket, but neither SOCK_DGRAM nor SOCK_STREAM. It should > not be treated as if it was SOCK_STREAM. > > If there is a genuine reason to support something like SOCK_RAW, it > should be explicitly handled. > > So, drop the 'default' case since it is broken already. > > Cc: jasowang@redhat.com > Cc: armbru@redhat.com > Cc: berrange@redhat.com > Cc: armbru@redhat.com > Suggested-by: Markus Armbruster <armbru@redhat.com> > Suggested-by: Daniel P. Berrange <berrange@redhat.com> > Signed-off-by: Mao Zhongyi <maozy.fnst@cn.fujitsu.com> > --- > net/socket.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/net/socket.c b/net/socket.c > index dcae1ae..53765bd 100644 > --- a/net/socket.c > +++ b/net/socket.c > @@ -449,9 +449,9 @@ static NetSocketState *net_socket_fd_init(NetClientState *peer, > case SOCK_STREAM: > return net_socket_fd_init_stream(peer, model, name, fd, is_connected); > default: > - /* who knows ... this could be a eg. a pty, do warn and continue as stream */ > - fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd); > - return net_socket_fd_init_stream(peer, model, name, fd, is_connected); > + error_report("qemu: error: socket type=%d for fd=%d is not" > + " SOCK_DGRAM or SOCK_STREAM", so_type, fd); > + closesocket(fd); > } > return NULL; > } You don't actually "drop the 'default' case", as your commit message claims. Perhaps: net/socket: Don't treat odd socket type as SOCK_STREAM In net_socket_fd_init(), the 'default' case is odd: it warns, then continues as if the socket type was SOCK_STREAM. The comment explains "this could be a eg. a pty", but that makes no sense. If @fd really was a pty, getsockopt() would fail with ENOTSOCK. If @fd was a socket, but neither SOCK_DGRAM nor SOCK_STREAM, it should not be treated as if it was SOCK_STREAM. Turn this case into an error. If there is a genuine reason to support something like SOCK_RAW, it should be handled explicitly. With something like that: Reviewed-by: Markus Armbruster <armbru@redhat.com>
Hi, Markus On 06/23/2017 09:36 PM, Markus Armbruster wrote: > Mao Zhongyi <maozy.fnst@cn.fujitsu.com> writes: > >> In the net_socket_fd_init(), the 'default' case and comment is odd. >> If @fd really was a pty, getsockopt() would fail with ENOTSOCK. If >> @fd was a socket, but neither SOCK_DGRAM nor SOCK_STREAM. It should >> not be treated as if it was SOCK_STREAM. >> >> If there is a genuine reason to support something like SOCK_RAW, it >> should be explicitly handled. >> >> So, drop the 'default' case since it is broken already. >> >> Cc: jasowang@redhat.com >> Cc: armbru@redhat.com >> Cc: berrange@redhat.com >> Cc: armbru@redhat.com >> Suggested-by: Markus Armbruster <armbru@redhat.com> >> Suggested-by: Daniel P. Berrange <berrange@redhat.com> >> Signed-off-by: Mao Zhongyi <maozy.fnst@cn.fujitsu.com> >> --- >> net/socket.c | 6 +++--- >> 1 file changed, 3 insertions(+), 3 deletions(-) >> >> diff --git a/net/socket.c b/net/socket.c >> index dcae1ae..53765bd 100644 >> --- a/net/socket.c >> +++ b/net/socket.c >> @@ -449,9 +449,9 @@ static NetSocketState *net_socket_fd_init(NetClientState *peer, >> case SOCK_STREAM: >> return net_socket_fd_init_stream(peer, model, name, fd, is_connected); >> default: >> - /* who knows ... this could be a eg. a pty, do warn and continue as stream */ >> - fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd); >> - return net_socket_fd_init_stream(peer, model, name, fd, is_connected); >> + error_report("qemu: error: socket type=%d for fd=%d is not" >> + " SOCK_DGRAM or SOCK_STREAM", so_type, fd); >> + closesocket(fd); >> } >> return NULL; >> } > > You don't actually "drop the 'default' case", as your commit message > claims. Perhaps: > > net/socket: Don't treat odd socket type as SOCK_STREAM > > In net_socket_fd_init(), the 'default' case is odd: it warns, then > continues as if the socket type was SOCK_STREAM. The comment > explains "this could be a eg. a pty", but that makes no sense. If > @fd really was a pty, getsockopt() would fail with ENOTSOCK. If @fd > was a socket, but neither SOCK_DGRAM nor SOCK_STREAM, it should not > be treated as if it was SOCK_STREAM. > > Turn this case into an error. If there is a genuine reason to > support something like SOCK_RAW, it should be handled explicitly. > > With something like that: Yes, I have noticed that the commit message is really not very match this patch after read your exact description. I will fix it in the next version. Thank you very much. :) Mao > Reviewed-by: Markus Armbruster <armbru@redhat.com>
diff --git a/net/socket.c b/net/socket.c index dcae1ae..53765bd 100644 --- a/net/socket.c +++ b/net/socket.c @@ -449,9 +449,9 @@ static NetSocketState *net_socket_fd_init(NetClientState *peer, case SOCK_STREAM: return net_socket_fd_init_stream(peer, model, name, fd, is_connected); default: - /* who knows ... this could be a eg. a pty, do warn and continue as stream */ - fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd); - return net_socket_fd_init_stream(peer, model, name, fd, is_connected); + error_report("qemu: error: socket type=%d for fd=%d is not" + " SOCK_DGRAM or SOCK_STREAM", so_type, fd); + closesocket(fd); } return NULL; }
In the net_socket_fd_init(), the 'default' case and comment is odd. If @fd really was a pty, getsockopt() would fail with ENOTSOCK. If @fd was a socket, but neither SOCK_DGRAM nor SOCK_STREAM. It should not be treated as if it was SOCK_STREAM. If there is a genuine reason to support something like SOCK_RAW, it should be explicitly handled. So, drop the 'default' case since it is broken already. Cc: jasowang@redhat.com Cc: armbru@redhat.com Cc: berrange@redhat.com Cc: armbru@redhat.com Suggested-by: Markus Armbruster <armbru@redhat.com> Suggested-by: Daniel P. Berrange <berrange@redhat.com> Signed-off-by: Mao Zhongyi <maozy.fnst@cn.fujitsu.com> --- net/socket.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)