@@ -2102,10 +2102,12 @@ s32 net_select(s32 maxfdp1,fd_set *readset,fd_set *writeset,fd_set *exceptset,st
21022102 return nready ;
21032103}
21042104
2105- s32 net_getsockopt (s32 s ,u32 level ,u32 optname ,const void * optval ,socklen_t optlen )
2105+ s32 net_getsockopt (s32 s ,u32 level ,u32 optname ,const void * optval ,socklen_t * optlen )
21062106{
21072107 s32 err = 0 ;
21082108 struct netsocket * sock ;
2109+ socklen_t optval_len = 0 ;
2110+ if (optlen ) optval_len = * optlen ;
21092111
21102112 sock = get_socket (s );
21112113 if (sock == NULL ) return - ENOTSOCK ;
@@ -2120,7 +2122,7 @@ s32 net_getsockopt(s32 s,u32 level,u32 optname,const void *optval,socklen_t optl
21202122 case SO_KEEPALIVE :
21212123 case SO_REUSEADDR :
21222124 case SO_REUSEPORT :
2123- if (optlen < sizeof (u32 )) err = EINVAL ;
2125+ if (optval_len < sizeof (u32 )) err = EINVAL ;
21242126 break ;
21252127 default :
21262128 LWIP_DEBUGF (SOCKETS_DEBUG , ("net_getsockopt(%d, SOL_SOCKET, UNIMPL: optname=0x%x, ..)\n" , s , optname ));
@@ -2134,7 +2136,7 @@ s32 net_getsockopt(s32 s,u32 level,u32 optname,const void *optval,socklen_t optl
21342136 switch (optname ) {
21352137 case IP_TTL :
21362138 case IP_TOS :
2137- if (optlen < sizeof (u32 )) err = EINVAL ;
2139+ if (optval_len < sizeof (u32 )) err = EINVAL ;
21382140 break ;
21392141 default :
21402142 LWIP_DEBUGF (SOCKETS_DEBUG , ("net_getsockopt(%d, IPPROTO_IP, UNIMPL: optname=0x%x, ..)\n" , s , optname ));
@@ -2145,7 +2147,7 @@ s32 net_getsockopt(s32 s,u32 level,u32 optname,const void *optval,socklen_t optl
21452147
21462148 case IPPROTO_TCP :
21472149 {
2148- if (optlen < sizeof (u32 )) {
2150+ if (optval_len < sizeof (u32 )) {
21492151 err = EINVAL ;
21502152 break ;
21512153 }
0 commit comments