make sbcreatecontrol take void * instead of caddr_t

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

make sbcreatecontrol take void * instead of caddr_t

David Gwynne-5
this makes it easier to call sbcreatecontrol without requiring casts.

it makes the argument const as well, and promotes the length variable to
size_t.

ok?

Index: sys/socketvar.h
===================================================================
RCS file: /cvs/src/sys/sys/socketvar.h,v
retrieving revision 1.88
diff -u -p -r1.88 socketvar.h
--- sys/socketvar.h 19 Nov 2018 13:15:37 -0000 1.88
+++ sys/socketvar.h 12 Feb 2019 23:52:42 -0000
@@ -290,7 +290,7 @@ int sbappendcontrol(struct socket *, str
 void sbappendrecord(struct socket *, struct sockbuf *, struct mbuf *);
 void sbcompress(struct sockbuf *sb, struct mbuf *m, struct mbuf *n);
 struct mbuf *
- sbcreatecontrol(caddr_t p, int size, int type, int level);
+ sbcreatecontrol(const void *, size_t, int type, int level);
 void sbdrop(struct socket *, struct sockbuf *, int);
 void sbdroprecord(struct sockbuf *sb);
 void sbflush(struct socket *, struct sockbuf *);
Index: kern/uipc_socket2.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_socket2.c,v
retrieving revision 1.99
diff -u -p -r1.99 uipc_socket2.c
--- kern/uipc_socket2.c 19 Nov 2018 13:15:37 -0000 1.99
+++ kern/uipc_socket2.c 12 Feb 2019 23:52:42 -0000
@@ -1020,14 +1020,14 @@ sbdroprecord(struct sockbuf *sb)
  * with the specified type for presentation on a socket buffer.
  */
 struct mbuf *
-sbcreatecontrol(caddr_t p, int size, int type, int level)
+sbcreatecontrol(const void *p, size_t size, int type, int level)
 {
  struct cmsghdr *cp;
  struct mbuf *m;
 
  if (CMSG_SPACE(size) > MCLBYTES) {
- printf("sbcreatecontrol: message too large %d\n", size);
- return NULL;
+ printf("sbcreatecontrol: message too large %zu\n", size);
+ return (NULL);
  }
 
  if ((m = m_get(M_DONTWAIT, MT_CONTROL)) == NULL)

Reply | Threaded
Open this post in threaded view
|

Re: make sbcreatecontrol take void * instead of caddr_t

Claudio Jeker
On Wed, Feb 13, 2019 at 09:54:26AM +1000, David Gwynne wrote:
> this makes it easier to call sbcreatecontrol without requiring casts.
>
> it makes the argument const as well, and promotes the length variable to
> size_t.
>
> ok?

OK claudio

One note, should there be an extra check that ensures size does not overflow
the math done by CMSG_SPACE()? Currently all callers are safe.
 

> Index: sys/socketvar.h
> ===================================================================
> RCS file: /cvs/src/sys/sys/socketvar.h,v
> retrieving revision 1.88
> diff -u -p -r1.88 socketvar.h
> --- sys/socketvar.h 19 Nov 2018 13:15:37 -0000 1.88
> +++ sys/socketvar.h 12 Feb 2019 23:52:42 -0000
> @@ -290,7 +290,7 @@ int sbappendcontrol(struct socket *, str
>  void sbappendrecord(struct socket *, struct sockbuf *, struct mbuf *);
>  void sbcompress(struct sockbuf *sb, struct mbuf *m, struct mbuf *n);
>  struct mbuf *
> - sbcreatecontrol(caddr_t p, int size, int type, int level);
> + sbcreatecontrol(const void *, size_t, int type, int level);
>  void sbdrop(struct socket *, struct sockbuf *, int);
>  void sbdroprecord(struct sockbuf *sb);
>  void sbflush(struct socket *, struct sockbuf *);
> Index: kern/uipc_socket2.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/uipc_socket2.c,v
> retrieving revision 1.99
> diff -u -p -r1.99 uipc_socket2.c
> --- kern/uipc_socket2.c 19 Nov 2018 13:15:37 -0000 1.99
> +++ kern/uipc_socket2.c 12 Feb 2019 23:52:42 -0000
> @@ -1020,14 +1020,14 @@ sbdroprecord(struct sockbuf *sb)
>   * with the specified type for presentation on a socket buffer.
>   */
>  struct mbuf *
> -sbcreatecontrol(caddr_t p, int size, int type, int level)
> +sbcreatecontrol(const void *p, size_t size, int type, int level)
>  {
>   struct cmsghdr *cp;
>   struct mbuf *m;
>  
>   if (CMSG_SPACE(size) > MCLBYTES) {
> - printf("sbcreatecontrol: message too large %d\n", size);
> - return NULL;
> + printf("sbcreatecontrol: message too large %zu\n", size);
> + return (NULL);
>   }
>  
>   if ((m = m_get(M_DONTWAIT, MT_CONTROL)) == NULL)
>

--
:wq Claudio