FreeBSD Bugzilla – Attachment 220659 Details for
Bug 251821
dns/unbound: SIGSEGV in 1.13.0
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
svn diff from upstream Issue 376
patch-dns_unbound-Issue376[1] (text/plain), 6.97 KB, created by
Bernard Spil
on 2020-12-17 08:43:37 UTC
(
hide
)
Description:
svn diff from upstream Issue 376
Filename:
MIME Type:
Creator:
Bernard Spil
Created:
2020-12-17 08:43:37 UTC
Size:
6.97 KB
patch
obsolete
>Index: dns/unbound/Makefile >=================================================================== >--- dns/unbound/Makefile (revision 558267) >+++ dns/unbound/Makefile (working copy) >@@ -3,6 +3,7 @@ > > PORTNAME= unbound > PORTVERSION= 1.13.0 >+PORTREVISION= 1 > CATEGORIES= dns > MASTER_SITES= https://www.nlnetlabs.nl/downloads/unbound/ \ > https://distfiles.crux.guru/ >Index: dns/unbound/files/patch-Issue376 >=================================================================== >--- dns/unbound/files/patch-Issue376 (nonexistent) >+++ dns/unbound/files/patch-Issue376 (working copy) >@@ -0,0 +1,156 @@ >+diff --git a/doc/Changelog b/doc/Changelog >+index 07a8e6ea4..3b831fea1 100644 >+--- doc/Changelog.orig >++++ doc/Changelog >+@@ -1,3 +1,7 @@ >++16 December 2020: George >++ - Fix error cases when udp-connect is set and send() returns an error >++ (modified patch from Xin Li @delphij). >++ >+ 30 November 2020: Wouter >+ - Fix assertion failure on double callback when iterator loses >+ interest in query at head of line that then has the tcp stream >+diff --git a/services/authzone.c b/services/authzone.c >+index 15be5d60c..e59548fc3 100644 >+--- services/authzone.c.orig >++++ services/authzone.c >+@@ -6093,7 +6093,7 @@ xfr_probe_send_probe(struct auth_xfer* xfr, struct module_env* env, >+ >+ /* send udp packet */ >+ if(!comm_point_send_udp_msg(xfr->task_probe->cp, env->scratch_buffer, >+- (struct sockaddr*)&addr, addrlen)) { >++ (struct sockaddr*)&addr, addrlen, 0)) { >+ char zname[255+1], as[256]; >+ dname_str(xfr->name, zname); >+ addr_to_str(&addr, addrlen, as, sizeof(as)); >+diff --git a/services/outside_network.c b/services/outside_network.c >+index 0886907f7..d8f9874e6 100644 >+--- services/outside_network.c.orig >++++ services/outside_network.c >+@@ -1899,17 +1899,10 @@ randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout) >+ log_assert(pend->pc && pend->pc->cp); >+ >+ /* send it over the commlink */ >+- if(outnet->udp_connect) { >+- if(!comm_point_send_udp_msg(pend->pc->cp, packet, NULL, 0)) { >+- portcomm_loweruse(outnet, pend->pc); >+- return 0; >+- } >+- } else { >+- if(!comm_point_send_udp_msg(pend->pc->cp, packet, >+- (struct sockaddr*)&pend->addr, pend->addrlen)) { >+- portcomm_loweruse(outnet, pend->pc); >+- return 0; >+- } >++ if(!comm_point_send_udp_msg(pend->pc->cp, packet, >++ (struct sockaddr*)&pend->addr, pend->addrlen, outnet->udp_connect)) { >++ portcomm_loweruse(outnet, pend->pc); >++ return 0; >+ } >+ >+ /* system calls to set timeout after sending UDP to make roundtrip >+diff --git a/testcode/fake_event.c b/testcode/fake_event.c >+index 75a6b8db9..5164332c0 100644 >+--- testcode/fake_event.c.orig >++++ testcode/fake_event.c >+@@ -1766,7 +1766,7 @@ struct comm_point* outnet_comm_point_for_http(struct outside_network* outnet, >+ } >+ >+ int comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, >+- struct sockaddr* addr, socklen_t addrlen) >++ struct sockaddr* addr, socklen_t addrlen, int ATTR_UNUSED(is_connected)) >+ { >+ struct fake_commpoint* fc = (struct fake_commpoint*)c; >+ struct replay_runtime* runtime = fc->runtime; >+diff --git a/util/netevent.c b/util/netevent.c >+index 7c6da50be..88be007e7 100644 >+--- util/netevent.c.orig >++++ util/netevent.c >+@@ -333,7 +333,7 @@ int tcp_connect_errno_needs_log(struct sockaddr* addr, socklen_t addrlen) >+ /* send a UDP reply */ >+ int >+ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, >+- struct sockaddr* addr, socklen_t addrlen) >++ struct sockaddr* addr, socklen_t addrlen, int is_connected) >+ { >+ ssize_t sent; >+ log_assert(c->fd != -1); >+@@ -341,8 +341,8 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, >+ if(sldns_buffer_remaining(packet) == 0) >+ log_err("error: send empty UDP packet"); >+ #endif >+- if(addr) { >+- log_assert(addr && addrlen > 0); >++ log_assert(addr && addrlen > 0); >++ if(!is_connected) { >+ sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), >+ sldns_buffer_remaining(packet), 0, >+ addr, addrlen); >+@@ -367,9 +367,14 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, >+ #endif >+ int e; >+ fd_set_block(c->fd); >+- sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), >+- sldns_buffer_remaining(packet), 0, >+- addr, addrlen); >++ if (!is_connected) { >++ sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), >++ sldns_buffer_remaining(packet), 0, >++ addr, addrlen); >++ } else { >++ sent = send(c->fd, (void*)sldns_buffer_begin(packet), >++ sldns_buffer_remaining(packet), 0); >++ } >+ e = errno; >+ fd_set_nonblock(c->fd); >+ errno = e; >+@@ -378,8 +383,12 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, >+ if(sent == -1) { >+ if(!udp_send_errno_needs_log(addr, addrlen)) >+ return 0; >+- verbose(VERB_OPS, "sendto failed: %s", sock_strerror(errno)); >+- log_addr(VERB_OPS, "remote address is", >++ if (!is_connected) { >++ verbose(VERB_OPS, "sendto failed: %s", sock_strerror(errno)); >++ } else { >++ verbose(VERB_OPS, "send failed: %s", sock_strerror(errno)); >++ } >++ log_addr(VERB_OPS, "remote address is", >+ (struct sockaddr_storage*)addr, addrlen); >+ return 0; >+ } else if((size_t)sent != sldns_buffer_remaining(packet)) { >+@@ -764,7 +773,7 @@ comm_point_udp_callback(int fd, short event, void* arg) >+ buffer = rep.c->buffer; >+ #endif >+ (void)comm_point_send_udp_msg(rep.c, buffer, >+- (struct sockaddr*)&rep.addr, rep.addrlen); >++ (struct sockaddr*)&rep.addr, rep.addrlen, 0); >+ } >+ if(!rep.c || rep.c->fd != fd) /* commpoint closed to -1 or reused for >+ another UDP port. Note rep.c cannot be reused with TCP fd. */ >+@@ -3944,7 +3953,7 @@ comm_point_send_reply(struct comm_reply *repinfo) >+ repinfo->addrlen, repinfo); >+ else >+ comm_point_send_udp_msg(repinfo->c, buffer, >+- (struct sockaddr*)&repinfo->addr, repinfo->addrlen); >++ (struct sockaddr*)&repinfo->addr, repinfo->addrlen, 0); >+ #ifdef USE_DNSTAP >+ if(repinfo->c->dtenv != NULL && >+ repinfo->c->dtenv->log_client_response_messages) >+diff --git a/util/netevent.h b/util/netevent.h >+index 266a74ff3..810190683 100644 >+--- util/netevent.h.orig >++++ util/netevent.h >+@@ -633,10 +633,11 @@ void comm_point_drop_reply(struct comm_reply* repinfo); >+ * @param addr: where to send it to. If NULL, send is performed, >+ * for connected sockets, to the connected address. >+ * @param addrlen: length of addr. >++ * @param is_connected: if the UDP socket is connect()ed. >+ * @return: false on a failure. >+ */ >+ int comm_point_send_udp_msg(struct comm_point* c, struct sldns_buffer* packet, >+- struct sockaddr* addr, socklen_t addrlen); >++ struct sockaddr* addr, socklen_t addrlen,int is_connected); >+ >+ /** >+ * Stop listening for input on the commpoint. No callbacks will happen. > >Property changes on: dns/unbound/files/patch-Issue376 >___________________________________________________________________ >Added: fbsd:nokeywords >## -0,0 +1 ## >+yes >\ No newline at end of property >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Added: svn:mime-type >## -0,0 +1 ## >+text/plain >\ No newline at end of property
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
Flags:
brnrd
:
maintainer-approval?
Actions:
View
|
Diff
Attachments on
bug 251821
: 220659
Working