Loading fs/ksmbd/smb2pdu.c +12 −10 Original line number Diff line number Diff line Loading @@ -7241,15 +7241,10 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, struct sockaddr_storage_rsp *sockaddr_storage; unsigned int flags; unsigned long long speed; struct sockaddr_in6 *csin6 = (struct sockaddr_in6 *)&conn->peer_addr; rtnl_lock(); for_each_netdev(&init_net, netdev) { if (out_buf_len < nbytes + sizeof(struct network_interface_info_ioctl_rsp)) { rtnl_unlock(); return -ENOSPC; } bool ipv4_set = false; if (netdev->type == ARPHRD_LOOPBACK) continue; Loading @@ -7257,6 +7252,12 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, flags = dev_get_flags(netdev); if (!(flags & IFF_RUNNING)) continue; ipv6_retry: if (out_buf_len < nbytes + sizeof(struct network_interface_info_ioctl_rsp)) { rtnl_unlock(); return -ENOSPC; } nii_rsp = (struct network_interface_info_ioctl_rsp *) &rsp->Buffer[nbytes]; Loading Loading @@ -7289,8 +7290,7 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, nii_rsp->SockAddr_Storage; memset(sockaddr_storage, 0, 128); if (conn->peer_addr.ss_family == PF_INET || ipv6_addr_v4mapped(&csin6->sin6_addr)) { if (!ipv4_set) { struct in_device *idev; sockaddr_storage->Family = cpu_to_le16(INTERNETWORK); Loading @@ -7301,6 +7301,9 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, continue; sockaddr_storage->addr4.IPv4address = idev_ipv4_address(idev); nbytes += sizeof(struct network_interface_info_ioctl_rsp); ipv4_set = true; goto ipv6_retry; } else { struct inet6_dev *idev6; struct inet6_ifaddr *ifa; Loading @@ -7322,10 +7325,9 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, break; } sockaddr_storage->addr6.ScopeId = 0; } nbytes += sizeof(struct network_interface_info_ioctl_rsp); } } rtnl_unlock(); /* zero if this is last one */ Loading Loading
fs/ksmbd/smb2pdu.c +12 −10 Original line number Diff line number Diff line Loading @@ -7241,15 +7241,10 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, struct sockaddr_storage_rsp *sockaddr_storage; unsigned int flags; unsigned long long speed; struct sockaddr_in6 *csin6 = (struct sockaddr_in6 *)&conn->peer_addr; rtnl_lock(); for_each_netdev(&init_net, netdev) { if (out_buf_len < nbytes + sizeof(struct network_interface_info_ioctl_rsp)) { rtnl_unlock(); return -ENOSPC; } bool ipv4_set = false; if (netdev->type == ARPHRD_LOOPBACK) continue; Loading @@ -7257,6 +7252,12 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, flags = dev_get_flags(netdev); if (!(flags & IFF_RUNNING)) continue; ipv6_retry: if (out_buf_len < nbytes + sizeof(struct network_interface_info_ioctl_rsp)) { rtnl_unlock(); return -ENOSPC; } nii_rsp = (struct network_interface_info_ioctl_rsp *) &rsp->Buffer[nbytes]; Loading Loading @@ -7289,8 +7290,7 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, nii_rsp->SockAddr_Storage; memset(sockaddr_storage, 0, 128); if (conn->peer_addr.ss_family == PF_INET || ipv6_addr_v4mapped(&csin6->sin6_addr)) { if (!ipv4_set) { struct in_device *idev; sockaddr_storage->Family = cpu_to_le16(INTERNETWORK); Loading @@ -7301,6 +7301,9 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, continue; sockaddr_storage->addr4.IPv4address = idev_ipv4_address(idev); nbytes += sizeof(struct network_interface_info_ioctl_rsp); ipv4_set = true; goto ipv6_retry; } else { struct inet6_dev *idev6; struct inet6_ifaddr *ifa; Loading @@ -7322,10 +7325,9 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, break; } sockaddr_storage->addr6.ScopeId = 0; } nbytes += sizeof(struct network_interface_info_ioctl_rsp); } } rtnl_unlock(); /* zero if this is last one */ Loading