FreeBSD Bugzilla – Attachment 14265 Details for
Bug 26806
rpcbind can dump core under certain circumstances
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
file.diff
file.diff (text/plain), 3.39 KB, created by
ak03
on 2001-04-23 23:30:01 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
ak03
Created:
2001-04-23 23:30:01 UTC
Size:
3.39 KB
patch
obsolete
>Index: util.c >=================================================================== >RCS file: /usr/ncvs/src/usr.sbin/rpcbind/util.c,v >retrieving revision 1.1 >diff -u -r1.1 util.c >--- util.c 2001/03/19 12:50:11 1.1 >+++ util.c 2001/04/23 21:48:25 >@@ -174,29 +174,14 @@ > * ifsin: address of interface being examined. > * clntsin: address that client want us to contact > * it on >- * servsin: local address of RPC service. > * sinmask: netmask of this interface >- * newsin: initially a copy of clntsin, eventually >- * the merged address > */ >- servsin = (struct sockaddr_in *)serv_sa; > clntsin = (struct sockaddr_in *)clnt_sa; > sinmask = (struct sockaddr_in *)ifap->ifa_netmask; >- newsin = (struct sockaddr_in *)&ss; > ifsin = (struct sockaddr_in *)ifap->ifa_addr; > if (!bitmaskcmp(&ifsin->sin_addr, &clntsin->sin_addr, >- &sinmask->sin_addr, sizeof (struct in_addr))) { >- /* >- * Found it. >- */ >- memcpy(newsin, ifap->ifa_addr, >- clnt_sa->sa_len); >- newsin->sin_port = servsin->sin_port; >- tbuf.len = clnt_sa->sa_len; >- tbuf.maxlen = sizeof (struct sockaddr_storage); >- tbuf.buf = newsin; >+ &sinmask->sin_addr, sizeof (struct in_addr))) > goto found; >- } > break; > #ifdef INET6 > case AF_INET6: >@@ -205,10 +190,7 @@ > * ifsin6: address of interface being examined. > * clntsin6: address that client want us to contact > * it on >- * servsin6: local address of RPC service. > * sin6mask: netmask of this interface >- * newsin6: initially a copy of clntsin, eventually >- * the merged address > * > * For v6 link local addresses, if the client contacted > * us via a link-local address, and wants us to reply >@@ -218,27 +200,19 @@ > ifsin6 = (struct sockaddr_in6 *)ifap->ifa_addr; > in6_fillscopeid(ifsin6); > clntsin6 = (struct sockaddr_in6 *)clnt_sa; >- servsin6 = (struct sockaddr_in6 *)serv_sa; > sin6mask = (struct sockaddr_in6 *)ifap->ifa_netmask; >- newsin6 = (struct sockaddr_in6 *)&ss; > if (IN6_IS_ADDR_LINKLOCAL(&ifsin6->sin6_addr) && > IN6_IS_ADDR_LINKLOCAL(&realsin6->sin6_addr) && > IN6_IS_ADDR_LINKLOCAL(&clntsin6->sin6_addr)) { > if (ifsin6->sin6_scope_id != > realsin6->sin6_scope_id) > continue; >-match: >- memcpy(newsin6, ifsin6, clnt_sa->sa_len); >- newsin6->sin6_port = servsin6->sin6_port; >- tbuf.maxlen = sizeof (struct sockaddr_storage); >- tbuf.len = clnt_sa->sa_len; >- tbuf.buf = newsin6; > goto found; > } > if (!bitmaskcmp(&ifsin6->sin6_addr, > &clntsin6->sin6_addr, &sin6mask->sin6_addr, > sizeof (struct in6_addr))) >- goto match; >+ goto found; > break; > #endif > default: >@@ -268,8 +242,31 @@ > } > ifap = bestif; > found: >- if (ifap != NULL) >+ if (ifap != NULL) { >+ memcpy(newsin, ifap->ifa_addr, clnt_sa->sa_len); >+ tbuf.len = clnt_sa->sa_len; >+ tbuf.maxlen = sizeof (struct sockaddr_storage); >+ tbuf.buf = &ss; >+ >+ switch (clnt->sa_family) { >+ case AF_INET: >+ servsin = (struct sockaddr_in *)serv_sa; >+ newsin = (struct sockaddr_in *)&ss; >+ newsin->sin_port = servsin->sin_port; >+ break; >+#ifdef INET6 >+ case AF_INET6: >+ servsin6 = (struct sockaddr_in6 *)serv_sa; >+ newsin6 = (struct sockaddr_in6 *)&ss; >+ newsin6->sin6_port = servsin6->sin6_port; >+ break; >+#endif >+ default: >+ goto freeit; >+ } >+ > ret = taddr2uaddr(nconf, &tbuf); >+ } > freeit: > freenetconfigent(nconf); > free(serv_sa);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 26806
: 14265