X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/322a0105bc70230236732e9751d0c888f37a5072..refs/heads/master:/netlink.c diff --git a/netlink.c b/netlink.c index e197e80..7add6d7 100644 --- a/netlink.c +++ b/netlink.c @@ -1,5 +1,24 @@ /* User-kernel network link */ +/* + * This file is part of secnet. + * See README for full list of copyright holders. + * + * secnet is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * secnet is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 3 along with secnet; if not, see + * https://www.gnu.org/licenses/gpl.html. + */ + /* See RFCs 791, 792, 1123 and 1812 */ /* The netlink device is actually a router. Tunnels are unnumbered @@ -386,7 +405,7 @@ static uint16_t netlink_icmp_reply_len(struct buffer_if *buf) /* We include the first 8 bytes of the packet data, provided they exist */ hlen+=8; plen=ntohs(iph->tot_len); - return (hlen>plen?plen:hlen); + return MIN(hlen,plen); } /* client indicates where the packet we're constructing a response to @@ -468,8 +487,8 @@ static bool_t netlink_check(struct netlink *st, struct buffer_if *buf, struct iphdr *iph=(struct iphdr *)buf->start; int32_t len; - if (iph->ihl < 5) BAD("ihl %u",iph->ihl); if (iph->version != 4) BAD("version %u",iph->version); + if (iph->ihl < 5) BAD("ihl %u",iph->ihl); if (buf->size < iph->ihl*4) BAD("size %"PRId32"<%u*4",buf->size,iph->ihl); if (ip_fast_csum((uint8_t *)iph, iph->ihl)!=0) BAD("csum"); len=ntohs(iph->tot_len); @@ -1039,8 +1058,7 @@ static void netlink_phase_hook(void *sst, uint32_t new_phase) /* All the networks serviced by the various tunnels should now * have been registered. We build a routing table by sorting the * clients by priority. */ - st->routes=safe_malloc_ary(sizeof(*st->routes),st->n_clients, - "netlink_phase_hook"); + NEW_ARY(st->routes,st->n_clients); /* Fill the table */ i=0; for (c=st->clients; c; c=c->next) { @@ -1138,7 +1156,7 @@ static closure_t *netlink_inst_create(struct netlink *st, return NULL; } - c=safe_malloc(sizeof(*c),"netlink_inst_create"); + NEW(c); c->cl.description=name; c->cl.type=CL_NETLINK; c->cl.apply=NULL; @@ -1307,7 +1325,7 @@ static list_t *null_apply(closure_t *self, struct cloc loc, dict_t *context, item_t *item; dict_t *dict; - st=safe_malloc(sizeof(*st),"null_apply"); + NEW(st); item=list_elem(args,0); if (!item || item->type!=t_dict)