Quick fix for LINT breakage caused by interface changes in accept(2), etc.

The log message for rev.1.160 of kern/uipc_syscalls.c and associated
changes only claimed to add restrict qualifiers (which have no effect in
the kernel so they probably shouldn't be added), but the following
interface changes were also made:
- caddr_t to `void *' and `struct sockaddr_t *'
- `int *' to `socklen_t *'.
These interface changes are not quite null, and this fix is quick (like
the changes in uipc_syscalls 1.160) because it uses bogus casts instead
of complete bounds-checked conversions.

Things should be fixed better when the conversions can be done without
using the stack gap.  linux_check_hdrincl() already uses the stack gap
and is fixed completely though the type mismatches in it were not fatal
(there were only fatal type mismatches from unopaquing pointers to
[o]sockaddr't's -- the difference between accept()'s args and oaccept()'s
args is now non-opaque, but this is not reflected in their args structs).
This commit is contained in:
Bruce Evans 2003-12-25 09:59:02 +00:00
parent e237b45890
commit 3db2a84395

View File

@ -405,20 +405,20 @@ static int
linux_check_hdrincl(struct thread *td, caddr_t *sg, int s)
{
struct getsockopt_args /* {
int s;
int level;
int name;
caddr_t val;
int *avalsize;
int s;
int level;
int name;
void * __restrict val;
socklen_t * __restrict avalsize;
} */ bsd_args;
int error;
caddr_t val, valsize;
int size_val = sizeof val;
int optval;
void * __restrict val;
socklen_t * __restrict valsize;
int error, optval, size_val;
val = stackgap_alloc(sg, sizeof(int));
valsize = stackgap_alloc(sg, sizeof(int));
val = stackgap_alloc(sg, sizeof(size_val));
valsize = stackgap_alloc(sg, sizeof(socklen_t));
size_val = sizeof(val);
if ((error = copyout(&size_val, valsize, sizeof(size_val))))
return (error);
@ -426,7 +426,7 @@ linux_check_hdrincl(struct thread *td, caddr_t *sg, int s)
bsd_args.level = IPPROTO_IP;
bsd_args.name = IP_HDRINCL;
bsd_args.val = val;
bsd_args.avalsize = (int *)valsize;
bsd_args.avalsize = valsize;
if ((error = getsockopt(td, &bsd_args)))
return (error);
@ -701,17 +701,17 @@ linux_accept(struct thread *td, struct linux_accept_args *args)
{
struct linux_accept_args linux_args;
struct accept_args /* {
int s;
caddr_t name;
int *anamelen;
int s;
struct sockaddr * __restrict name;
socklen_t * __restrict anamelen;
} */ bsd_args;
struct close_args /* {
int fd;
} */ c_args;
struct fcntl_args /* {
int fd;
int cmd;
long arg;
int fd;
int cmd;
long arg;
} */ f_args;
int error;
@ -719,8 +719,9 @@ linux_accept(struct thread *td, struct linux_accept_args *args)
return (error);
bsd_args.s = linux_args.s;
bsd_args.name = (caddr_t)linux_args.addr;
bsd_args.anamelen = linux_args.namelen;
/* XXX: */
bsd_args.name = (struct sockaddr * __restrict)linux_args.addr;
bsd_args.anamelen = linux_args.namelen; /* XXX */
error = oaccept(td, &bsd_args);
if (error)
return (error);
@ -757,9 +758,9 @@ linux_getsockname(struct thread *td, struct linux_getsockname_args *args)
{
struct linux_getsockname_args linux_args;
struct getsockname_args /* {
int fdes;
caddr_t asa;
int *alen;
int fdes;
struct sockaddr * __restrict asa;
socklen_t * __restrict alen;
} */ bsd_args;
int error;
@ -767,8 +768,9 @@ linux_getsockname(struct thread *td, struct linux_getsockname_args *args)
return (error);
bsd_args.fdes = linux_args.s;
bsd_args.asa = (caddr_t) linux_args.addr;
bsd_args.alen = linux_args.namelen;
/* XXX: */
bsd_args.asa = (struct sockaddr * __restrict)linux_args.addr;
bsd_args.alen = linux_args.namelen; /* XXX */
error = ogetsockname(td, &bsd_args);
if (error)
return (error);
@ -942,12 +944,12 @@ linux_recvfrom(struct thread *td, struct linux_recvfrom_args *args)
{
struct linux_recvfrom_args linux_args;
struct recvfrom_args /* {
int s;
caddr_t buf;
size_t len;
int flags;
caddr_t from;
int *fromlenaddr;
int s;
caddr_t buf;
size_t len;
int flags;
struct sockaddr * __restrict from;
socklen_t * __restrict fromlenaddr;
} */ bsd_args;
int error;
@ -958,8 +960,9 @@ linux_recvfrom(struct thread *td, struct linux_recvfrom_args *args)
bsd_args.buf = linux_args.buf;
bsd_args.len = linux_args.len;
bsd_args.flags = linux_to_bsd_msg_flags(linux_args.flags);
bsd_args.from = linux_args.from;
bsd_args.fromlenaddr = linux_args.fromlen;
/* XXX: */
bsd_args.from = (struct sockaddr * __restrict)linux_args.from;
bsd_args.fromlenaddr = linux_args.fromlen; /* XXX */
error = orecvfrom(td, &bsd_args);
if (error)
return (error);