Message ID | 1452752664-11818-1-git-send-email-chengang@emindsoft.com.cn |
---|---|
State | New |
Headers | show |
Le 14/01/2016 07:24, chengang@emindsoft.com.cn a écrit : > From: Chen Gang <chengang@emindsoft.com.cn> > > After host_to_target_sock_type(), the length of val may be changed, so > calculate the related lv, too. > > Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com> > --- > linux-user/syscall.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index fcdca2a..0e95f35 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -1841,6 +1841,7 @@ static abi_long do_getsockopt(int sockfd, int level, int optname, > return ret; > if (optname == SO_TYPE) { > val = host_to_target_sock_type(val); > + lv = (val >> 8) ? 4 : 1; It seems the kernel always returns sizeof(int) (for all archs), what is the aim of reducing the size ? > } > if (len > lv) > len = lv; >
On 2016年01月14日 16:15, Laurent Vivier wrote: > Le 14/01/2016 07:24, chengang@emindsoft.com.cn a écrit : >> From: Chen Gang <chengang@emindsoft.com.cn> >> >> After host_to_target_sock_type(), the length of val may be changed, so >> calculate the related lv, too. >> >> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com> >> --- >> linux-user/syscall.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/linux-user/syscall.c b/linux-user/syscall.c >> index fcdca2a..0e95f35 100644 >> --- a/linux-user/syscall.c >> +++ b/linux-user/syscall.c >> @@ -1841,6 +1841,7 @@ static abi_long do_getsockopt(int sockfd, int level, int optname, >> return ret; >> if (optname == SO_TYPE) { >> val = host_to_target_sock_type(val); >> + lv = (val >> 8) ? 4 : 1; > > It seems the kernel always returns sizeof(int) (for all archs), what is > the aim of reducing the size ? > I am not quite sure whether kernel always returns sizeof(int) (I guess, it should be). For me, if you are sure, we can skip this patch. Thanks.
Le 14/01/2016 10:01, Chen Gang a écrit : > On 2016年01月14日 16:15, Laurent Vivier wrote: >> Le 14/01/2016 07:24, chengang@emindsoft.com.cn a écrit : >>> From: Chen Gang <chengang@emindsoft.com.cn> >>> >>> After host_to_target_sock_type(), the length of val may be changed, so >>> calculate the related lv, too. >>> >>> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com> >>> --- >>> linux-user/syscall.c | 1 + >>> 1 file changed, 1 insertion(+) >>> >>> diff --git a/linux-user/syscall.c b/linux-user/syscall.c >>> index fcdca2a..0e95f35 100644 >>> --- a/linux-user/syscall.c >>> +++ b/linux-user/syscall.c >>> @@ -1841,6 +1841,7 @@ static abi_long do_getsockopt(int sockfd, int level, int optname, >>> return ret; >>> if (optname == SO_TYPE) { >>> val = host_to_target_sock_type(val); >>> + lv = (val >> 8) ? 4 : 1; >> >> It seems the kernel always returns sizeof(int) (for all archs), what is >> the aim of reducing the size ? >> > > I am not quite sure whether kernel always returns sizeof(int) (I guess, > it should be). it can be 1 only if len is 1, but this is managed below. > For me, if you are sure, we can skip this patch. Does it fix something ? Laurent
On 2016年01月14日 17:10, Laurent Vivier wrote: > > Le 14/01/2016 10:01, Chen Gang a écrit : >> >> I am not quite sure whether kernel always returns sizeof(int) (I guess, >> it should be). > > it can be 1 only if len is 1, but this is managed below. > Excuse me, I do not quite understand your meaning. For me, if we are sure lv is always 4 for SO_TYPE, we don't need this patch. If lv may be 1 for SO_TYPE (it means val >> 8 may be zero), after call host_to_target_sock_type, val >> 8 may be non-zero, theoretically. In this case, we need modify lv to 4. >> For me, if you are sure, we can skip this patch. > > Does it fix something ? > It is only theoretical, not real world, at present. Thanks.
Le 14/01/2016 10:37, Chen Gang a écrit : > > On 2016年01月14日 17:10, Laurent Vivier wrote: >> >> Le 14/01/2016 10:01, Chen Gang a écrit : >>> >>> I am not quite sure whether kernel always returns sizeof(int) (I guess, >>> it should be). >> >> it can be 1 only if len is 1, but this is managed below. >> > > Excuse me, I do not quite understand your meaning. > > For me, if we are sure lv is always 4 for SO_TYPE, we don't need this > patch. > > If lv may be 1 for SO_TYPE (it means val >> 8 may be zero), after call > host_to_target_sock_type, val >> 8 may be non-zero, theoretically. In > this case, we need modify lv to 4. > >>> For me, if you are sure, we can skip this patch. >> >> Does it fix something ? >> > > It is only theoretical, not real world, at present. So I think we can skip it. Laurent
On 2016年01月14日 17:41, Laurent Vivier wrote: > > Le 14/01/2016 10:37, Chen Gang a écrit : >> >> On 2016年01月14日 17:10, Laurent Vivier wrote: >>> >>> Le 14/01/2016 10:01, Chen Gang a écrit : >>>> >>>> I am not quite sure whether kernel always returns sizeof(int) (I guess, >>>> it should be). >>> >>> it can be 1 only if len is 1, but this is managed below. >>> >> >> Excuse me, I do not quite understand your meaning. >> >> For me, if we are sure lv is always 4 for SO_TYPE, we don't need this >> patch. >> >> If lv may be 1 for SO_TYPE (it means val >> 8 may be zero), after call >> host_to_target_sock_type, val >> 8 may be non-zero, theoretically. In >> this case, we need modify lv to 4. >> >>>> For me, if you are sure, we can skip this patch. >>> >>> Does it fix something ? >>> >> >> It is only theoretical, not real world, at present. > > So I think we can skip it. > It is OK to me. Thanks.
diff --git a/linux-user/syscall.c b/linux-user/syscall.c index fcdca2a..0e95f35 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -1841,6 +1841,7 @@ static abi_long do_getsockopt(int sockfd, int level, int optname, return ret; if (optname == SO_TYPE) { val = host_to_target_sock_type(val); + lv = (val >> 8) ? 4 : 1; } if (len > lv) len = lv;