diff --git a/fs/hmdfs/comm/transport.c b/fs/hmdfs/comm/transport.c index 9f65f618a746d009378a757c1a2356e70e414761..1b52f46b69b8e0151f1bd8f940d5ab8f7d342027 100644 --- a/fs/hmdfs/comm/transport.c +++ b/fs/hmdfs/comm/transport.c @@ -896,12 +896,15 @@ static bool is_tcp_socket(struct tcp_handle *tcp) return false; } - if (tcp->sock->sk->sk_protocol != IPPROTO_TCP) { + lock_sock(tcp->sock->sk); + if (tcp->sock->sk->sk_protocol != IPPROTO_TCP || + tcp->sock->type != SOCK_STREAM || + tcp->sock->sk->sk_family != AF_INET) { hmdfs_err("invalid socket protocol"); + release_sock(tcp->sock->sk); return false; } - lock_sock(tcp->sock->sk); icsk = inet_csk(tcp->sock->sk); if (icsk->icsk_ulp_ops) { hmdfs_err("ulp not NULL");