lagg(4): allocate memory for struct lagg_req by calloc(3)

to fix build error on clang
This commit is contained in:
yamaguchi 2024-04-09 08:53:08 +00:00
parent 4ed1e5f144
commit f37b6fa5da
1 changed files with 20 additions and 17 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: lagg.c,v 1.7 2024/04/08 00:50:49 yamaguchi Exp $ */
/* $NetBSD: lagg.c,v 1.8 2024/04/09 08:53:08 yamaguchi Exp $ */
/*
* Copyright (c) 2021 Internet Initiative Japan Inc.
@ -28,7 +28,7 @@
#include <sys/cdefs.h>
#if !defined(lint)
__RCSID("$NetBSD: lagg.c,v 1.7 2024/04/08 00:50:49 yamaguchi Exp $");
__RCSID("$NetBSD: lagg.c,v 1.8 2024/04/09 08:53:08 yamaguchi Exp $");
#endif /* !defined(lint) */
#include <sys/param.h>
@ -393,15 +393,13 @@ setlaggproto(prop_dictionary_t env, prop_dictionary_t oenv)
static int
setlaggport(prop_dictionary_t env, prop_dictionary_t oenv __unused)
{
struct {
struct lagg_req req;
struct laggreqport port[1];
} _req;
struct lagg_req *req;
struct laggreqport *rp;
const char *ifname;
enum lagg_ioctl ioc;
int64_t lpcmd, pri;
int rv;
size_t sz;
if (!prop_dictionary_get_string(env, "laggport", &ifname)) {
if (lagg_debug)
@ -410,11 +408,15 @@ setlaggport(prop_dictionary_t env, prop_dictionary_t oenv __unused)
return -1;
}
memset(&_req, 0, sizeof(_req));
req = (struct lagg_req *)&_req;
rp = &req->lrq_reqports[0];
req->lrq_nports = 1;
sz = sizeof(*req) + sizeof(req->lrq_reqports[0]) * 1;
req = calloc(1, sz);
if (req == NULL) {
errno = ENOBUFS;
return -1;
}
req->lrq_nports = 1;
rp = &req->lrq_reqports[0];
strlcpy(rp->rp_portname, ifname, sizeof(rp->rp_portname));
ioc = LAGGIOC_NOCMD;
@ -433,15 +435,16 @@ setlaggport(prop_dictionary_t env, prop_dictionary_t oenv __unused)
if (ioc != LAGGIOC_NOCMD) {
req->lrq_ioctl = ioc;
if (indirect_ioctl(env, SIOCSLAGG, req) == -1) {
if (lagg_debug) {
warn("cmd=%d", ioc);
}
return -1;
}
rv = indirect_ioctl(env, SIOCSLAGG, req);
if (lagg_debug && rv == -1)
warn("cmd=%d", ioc);
} else {
rv = 0;
}
return 0;
free(req);
return rv;
}
static int