Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F155101785
D39557.id120263.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D39557.id120263.diff
View Options
diff --git a/sys/netlink/netlink_message_writer.h b/sys/netlink/netlink_message_writer.h
--- a/sys/netlink/netlink_message_writer.h
+++ b/sys/netlink/netlink_message_writer.h
@@ -48,10 +48,7 @@
char *data; /* pointer to the contiguous storage */
void *_storage; /* Underlying storage pointer */
nl_writer_cb *cb; /* Callback to flush data */
- union {
- void *arg_ptr; /* Callback argument as pointer */
- uint64_t arg_uint; /* Callback argument as int */
- };
+ uintptr_t arg; /* Callback argument: uint or pointer */
int num_messages; /* Number of messages in the buffer */
int malloc_flag; /* M_WAITOK or M_NOWAIT */
uint8_t writer_type; /* NS_WRITER_TYPE_* */
diff --git a/sys/netlink/netlink_message_writer.c b/sys/netlink/netlink_message_writer.c
--- a/sys/netlink/netlink_message_writer.c
+++ b/sys/netlink/netlink_message_writer.c
@@ -132,13 +132,13 @@
free(buf, M_NETLINK);
int io_flags = (nw->ignore_limit) ? NL_IOF_IGNORE_LIMIT : 0;
- return (nl_send_one(m, (struct nlpcb *)(nw->arg_ptr), cnt, io_flags));
+ return (nl_send_one(m, (struct nlpcb *)(nw->arg), cnt, io_flags));
}
static bool
nlmsg_write_group_buf(struct nl_writer *nw, void *buf, int datalen, int cnt)
{
- NL_LOG(LOG_DEBUG2, "IN: ptr: %p len: %d arg: %p", buf, datalen, nw->arg_ptr);
+ NL_LOG(LOG_DEBUG2, "IN: ptr: %p len: %d arg: %p", buf, datalen, (void *)nw->arg);
if (__predict_false(datalen == 0)) {
free(buf, M_NETLINK);
return (true);
@@ -155,15 +155,15 @@
if (!success)
return (false);
- nl_send_group(m, cnt, nw->arg_uint >> 16, nw->arg_uint & 0xFFFF);
+ nl_send_group(m, cnt, nw->arg >> 16, nw->arg & 0xFFFF);
return (true);
}
static bool
nlmsg_write_chain_buf(struct nl_writer *nw, void *buf, int datalen, int cnt)
{
- struct mbuf **m0 = (struct mbuf **)(nw->arg_ptr);
- NL_LOG(LOG_DEBUG2, "IN: ptr: %p len: %d arg: %p", buf, datalen, nw->arg_ptr);
+ struct mbuf **m0 = (struct mbuf **)(nw->arg);
+ NL_LOG(LOG_DEBUG2, "IN: ptr: %p len: %d arg: %p", buf, datalen, (void *)nw->arg);
if (__predict_false(datalen == 0)) {
free(buf, M_NETLINK);
@@ -227,7 +227,7 @@
nlmsg_write_socket_mbuf(struct nl_writer *nw, void *buf, int datalen, int cnt)
{
struct mbuf *m = (struct mbuf *)buf;
- NL_LOG(LOG_DEBUG2, "IN: ptr: %p len: %d arg: %p", buf, datalen, nw->arg_ptr);
+ NL_LOG(LOG_DEBUG2, "IN: ptr: %p len: %d arg: %p", buf, datalen, (void *)nw->arg);
if (__predict_false(datalen == 0)) {
m_freem(m);
@@ -237,14 +237,14 @@
m->m_pkthdr.len = datalen;
m->m_len = datalen;
int io_flags = (nw->ignore_limit) ? NL_IOF_IGNORE_LIMIT : 0;
- return (nl_send_one(m, (struct nlpcb *)(nw->arg_ptr), cnt, io_flags));
+ return (nl_send_one(m, (struct nlpcb *)(nw->arg), cnt, io_flags));
}
static bool
nlmsg_write_group_mbuf(struct nl_writer *nw, void *buf, int datalen, int cnt)
{
struct mbuf *m = (struct mbuf *)buf;
- NL_LOG(LOG_DEBUG2, "IN: ptr: %p len: %d arg: %p", buf, datalen, nw->arg_ptr);
+ NL_LOG(LOG_DEBUG2, "IN: ptr: %p len: %d arg: %p", buf, datalen, (void *)nw->arg);
if (__predict_false(datalen == 0)) {
m_freem(m);
@@ -253,7 +253,7 @@
m->m_pkthdr.len = datalen;
m->m_len = datalen;
- nl_send_group(m, cnt, nw->arg_uint >> 16, nw->arg_uint & 0xFFFF);
+ nl_send_group(m, cnt, nw->arg >> 16, nw->arg & 0xFFFF);
return (true);
}
@@ -261,9 +261,9 @@
nlmsg_write_chain_mbuf(struct nl_writer *nw, void *buf, int datalen, int cnt)
{
struct mbuf *m_new = (struct mbuf *)buf;
- struct mbuf **m0 = (struct mbuf **)(nw->arg_ptr);
+ struct mbuf **m0 = (struct mbuf **)(nw->arg);
- NL_LOG(LOG_DEBUG2, "IN: ptr: %p len: %d arg: %p", buf, datalen, nw->arg_ptr);
+ NL_LOG(LOG_DEBUG2, "IN: ptr: %p len: %d arg: %p", buf, datalen, (void *)nw->arg);
if (__predict_false(datalen == 0)) {
m_freem(m_new);
@@ -324,7 +324,7 @@
{
struct linear_buffer *lb = (struct linear_buffer *)buf;
char *data = (char *)(lb + 1);
- struct nlpcb *nlp = (struct nlpcb *)(nw->arg_ptr);
+ struct nlpcb *nlp = (struct nlpcb *)(nw->arg);
if (__predict_false(datalen == 0)) {
free(buf, M_NETLINK);
@@ -365,7 +365,7 @@
m_append(m, datalen, data);
free(buf, M_NETLINK);
- nl_send_group(m, cnt, nw->arg_uint >> 16, nw->arg_uint & 0xFFFF);
+ nl_send_group(m, cnt, nw->arg >> 16, nw->arg & 0xFFFF);
return (true);
}
@@ -440,7 +440,7 @@
{
if (!nlmsg_get_buf(nw, size, false, nlp->nl_linux))
return (false);
- nw->arg_ptr = (void *)nlp;
+ nw->arg = (uintptr_t)nlp;
nw->writer_target = NS_WRITER_TARGET_SOCKET;
nlmsg_set_callback(nw);
return (true);
@@ -451,7 +451,7 @@
{
if (!nlmsg_get_buf(nw, size, false, false))
return (false);
- nw->arg_uint = (uint64_t)protocol << 16 | (uint64_t)group_id;
+ nw->arg = (uintptr_t)protocol << 16 | (uintptr_t)group_id;
nw->writer_target = NS_WRITER_TARGET_GROUP;
nlmsg_set_callback(nw);
return (true);
@@ -463,7 +463,7 @@
if (!nlmsg_get_buf(nw, size, false, false))
return (false);
*pm = NULL;
- nw->arg_ptr = (void *)pm;
+ nw->arg = (uintptr_t)pm;
nw->writer_target = NS_WRITER_TARGET_CHAIN;
nlmsg_set_callback(nw);
NL_LOG(LOG_DEBUG3, "setup cb %p (need %p)", nw->cb, &nlmsg_write_chain_mbuf);
@@ -542,7 +542,7 @@
/* Update callback data */
ns_new.writer_target = nw->writer_target;
nlmsg_set_callback(&ns_new);
- ns_new.arg_uint = nw->arg_uint;
+ ns_new.arg = nw->arg;
/* Copy last (unfinished) header to the new storage */
int last_len = nw->offset - completed_len;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, May 2, 10:11 AM (14 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32614102
Default Alt Text
D39557.id120263.diff (5 KB)
Attached To
Mode
D39557: netlink: make netlink work correctly on CHERI.
Attached
Detach File
Event Timeline
Log In to Comment