git: e1caa707fee0 - stable/12 - netgraph/ng_base: Allow larger BINARY2ASCII conversions
Lutz Donnerhacke
donner at FreeBSD.org
Sun May 9 13:23:54 UTC 2021
The branch stable/12 has been updated by donner:
URL: https://cgit.FreeBSD.org/src/commit/?id=e1caa707fee06d00a0e6ba0445d734e748721d77
commit e1caa707fee06d00a0e6ba0445d734e748721d77
Author: Lutz Donnerhacke <donner at FreeBSD.org>
AuthorDate: 2021-02-07 21:07:34 +0000
Commit: Lutz Donnerhacke <donner at FreeBSD.org>
CommitDate: 2021-05-09 13:23:19 +0000
netgraph/ng_base: Allow larger BINARY2ASCII conversions
Allocate the necessary memory for the conversion dynamically starting
with a value which is sufficient for almost all normal cases.
PR: 187835
Reviewed by: kp
Differential Revision: https://reviews.freebsd.org/D23840
(cherry picked from commit 45d75e3ac3fb5bf8230ca28dc09b48c6e5ed7a4f)
---
sys/netgraph/ng_base.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/sys/netgraph/ng_base.c b/sys/netgraph/ng_base.c
index 271397f669be..4c6a2f606119 100644
--- a/sys/netgraph/ng_base.c
+++ b/sys/netgraph/ng_base.c
@@ -2771,7 +2771,7 @@ ng_generic_msg(node_p here, item_p item, hook_p lasthook)
case NGM_BINARY2ASCII:
{
- int bufSize = 20 * 1024; /* XXX hard coded constant */
+ int bufSize = 1024;
const struct ng_parse_type *argstype;
const struct ng_cmdlist *c;
struct ng_mesg *binary, *ascii;
@@ -2785,7 +2785,7 @@ ng_generic_msg(node_p here, item_p item, hook_p lasthook)
error = EINVAL;
break;
}
-
+retry_b2a:
/* Get a response message with lots of room */
NG_MKRESPONSE(resp, msg, sizeof(*ascii) + bufSize, M_NOWAIT);
if (resp == NULL) {
@@ -2827,9 +2827,13 @@ ng_generic_msg(node_p here, item_p item, hook_p lasthook)
if (argstype == NULL) {
*ascii->data = '\0';
} else {
- if ((error = ng_unparse(argstype,
- (u_char *)binary->data,
- ascii->data, bufSize)) != 0) {
+ error = ng_unparse(argstype, (u_char *)binary->data,
+ ascii->data, bufSize);
+ if (error == ERANGE) {
+ NG_FREE_MSG(resp);
+ bufSize *= 2;
+ goto retry_b2a;
+ } else if (error) {
NG_FREE_MSG(resp);
break;
}
More information about the dev-commits-src-all
mailing list