Page MenuHomeFreeBSD

D53945.id.diff
No OneTemporary

D53945.id.diff

diff --git a/lib/libc/gen/getgrent.c b/lib/libc/gen/getgrent.c
--- a/lib/libc/gen/getgrent.c
+++ b/lib/libc/gen/getgrent.c
@@ -347,16 +347,16 @@
memcpy(&p, buffer + sizeof(struct group), sizeof(char *));
if (orig_buf_size + sizeof(struct group) + sizeof(char *) +
- _ALIGN(p) - (size_t)p < buffer_size) {
+ __nss_buf_misalignment(p) < buffer_size) {
*ret_errno = ERANGE;
return (NS_RETURN);
}
orig_buf = (char *)_ALIGN(orig_buf);
memcpy(orig_buf, buffer + sizeof(struct group) + sizeof(char *) +
- _ALIGN(p) - (size_t)p,
+ __nss_buf_misalignment(p),
buffer_size - sizeof(struct group) - sizeof(char *) -
- _ALIGN(p) + (size_t)p);
+ __nss_buf_misalignment(p));
p = (char *)_ALIGN(p);
NS_APPLY_OFFSET(grp->gr_name, orig_buf, p, char *);
diff --git a/lib/libc/include/nscache.h b/lib/libc/include/nscache.h
--- a/lib/libc/include/nscache.h
+++ b/lib/libc/include/nscache.h
@@ -29,6 +29,8 @@
#ifndef __NS_CACHE_H__
#define __NS_CACHE_H__
+#include <sys/_align.h>
+
#include "nscachedcli.h"
typedef int (*nss_cache_id_func_t)(char *, size_t *, va_list, void *);
@@ -178,6 +180,12 @@
} nss_cache_data;
__BEGIN_DECLS
+static inline __ptrdiff_t
+__nss_buf_misalignment(const void *p)
+{
+ return ((char *)_ALIGN(p) - (char *)p);
+}
+
/* dummy function, which is needed to make nss_method_lookup happy */
extern int __nss_cache_handler(void *, void *, va_list);
diff --git a/lib/libc/net/gethostnamadr.c b/lib/libc/net/gethostnamadr.c
--- a/lib/libc/net/gethostnamadr.c
+++ b/lib/libc/net/gethostnamadr.c
@@ -402,9 +402,9 @@
orig_buf = (char *)_ALIGN(orig_buf);
memcpy(orig_buf, buffer + sizeof(struct hostent) + sizeof(char *) +
- _ALIGN(p) - (size_t)p,
+ __nss_buf_misalignment(p),
buffer_size - sizeof(struct hostent) - sizeof(char *) -
- _ALIGN(p) + (size_t)p);
+ __nss_buf_misalignment(p));
p = (char *)_ALIGN(p);
NS_APPLY_OFFSET(ht->h_name, orig_buf, p, char *);
diff --git a/lib/libc/net/getnetnamadr.c b/lib/libc/net/getnetnamadr.c
--- a/lib/libc/net/getnetnamadr.c
+++ b/lib/libc/net/getnetnamadr.c
@@ -249,9 +249,9 @@
orig_buf = (char *)_ALIGN(orig_buf);
memcpy(orig_buf, buffer + sizeof(struct netent) + sizeof(char *) +
- _ALIGN(p) - (size_t)p,
+ __nss_buf_misalignment(p),
buffer_size - sizeof(struct netent) - sizeof(char *) -
- _ALIGN(p) + (size_t)p);
+ __nss_buf_misalignment(p));
p = (char *)_ALIGN(p);
NS_APPLY_OFFSET(ne->n_name, orig_buf, p, char *);
diff --git a/lib/libc/net/getprotoent.c b/lib/libc/net/getprotoent.c
--- a/lib/libc/net/getprotoent.c
+++ b/lib/libc/net/getprotoent.c
@@ -265,9 +265,9 @@
orig_buf = (char *)_ALIGN(orig_buf);
memcpy(orig_buf, buffer + sizeof(struct protoent) + sizeof(char *) +
- _ALIGN(p) - (size_t)p,
+ __nss_buf_misalignment(p),
buffer_size - sizeof(struct protoent) - sizeof(char *) -
- _ALIGN(p) + (size_t)p);
+ __nss_buf_misalignment(p));
p = (char *)_ALIGN(p);
NS_APPLY_OFFSET(proto->p_name, orig_buf, p, char *);
diff --git a/lib/libc/net/getservent.c b/lib/libc/net/getservent.c
--- a/lib/libc/net/getservent.c
+++ b/lib/libc/net/getservent.c
@@ -1084,9 +1084,9 @@
orig_buf = (char *)_ALIGN(orig_buf);
memcpy(orig_buf, buffer + sizeof(struct servent) + sizeof(char *) +
- (_ALIGN(p) - (size_t)p),
+ __nss_buf_misalignment(p),
buffer_size - sizeof(struct servent) - sizeof(char *) -
- (_ALIGN(p) - (size_t)p));
+ __nss_buf_misalignment(p));
p = (char *)_ALIGN(p);
NS_APPLY_OFFSET(serv->s_name, orig_buf, p, char *);
diff --git a/lib/libc/rpc/getrpcent.c b/lib/libc/rpc/getrpcent.c
--- a/lib/libc/rpc/getrpcent.c
+++ b/lib/libc/rpc/getrpcent.c
@@ -778,9 +778,9 @@
orig_buf = (char *)_ALIGN(orig_buf);
memcpy(orig_buf, buffer + sizeof(struct rpcent) + sizeof(char *) +
- _ALIGN(p) - (size_t)p,
+ __nss_buf_misalignment(p),
buffer_size - sizeof(struct rpcent) - sizeof(char *) -
- _ALIGN(p) + (size_t)p);
+ __nss_buf_misalignment(p));
p = (char *)_ALIGN(p);
NS_APPLY_OFFSET(rpc->r_name, orig_buf, p, char *);

File Metadata

Mime Type
text/plain
Expires
Sat, Dec 20, 8:03 AM (14 h, 54 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27093675
Default Alt Text
D53945.id.diff (4 KB)

Event Timeline