diff options
-rw-r--r-- | sys/netgraph/atm/ng_ccatm.h | 1 | ||||
-rw-r--r-- | sys/netgraph/ng_pppoe.c | 23 | ||||
-rw-r--r-- | sys/netgraph/ng_pppoe.h | 2 |
3 files changed, 12 insertions, 14 deletions
diff --git a/sys/netgraph/atm/ng_ccatm.h b/sys/netgraph/atm/ng_ccatm.h index 9e1eb66..f85c128 100644 --- a/sys/netgraph/atm/ng_ccatm.h +++ b/sys/netgraph/atm/ng_ccatm.h @@ -166,7 +166,6 @@ struct ngm_ccatm_portlist { struct ccatm_op { uint32_t op; /* request code */ - u_char data[]; }; #endif diff --git a/sys/netgraph/ng_pppoe.c b/sys/netgraph/ng_pppoe.c index cc8a460..ae5ba70 100644 --- a/sys/netgraph/ng_pppoe.c +++ b/sys/netgraph/ng_pppoe.c @@ -290,7 +290,7 @@ static int pppoe_send_event(sessp sp, enum cmd cmdid); static __inline const struct pppoe_tag* next_tag(const struct pppoe_hdr* ph) { - return (const struct pppoe_tag*)(((const char*)&ph->tag[0]) + return (const struct pppoe_tag*)(((const char*)(ph + 1)) + ntohs(ph->length)); } @@ -303,7 +303,7 @@ static const struct pppoe_tag* get_tag(const struct pppoe_hdr* ph, uint16_t idx) { const char *const end = (const char *)next_tag(ph); - const struct pppoe_tag *pt = &ph->tag[0]; + const struct pppoe_tag *pt = (const void *)(ph + 1); const char *ptn; /* @@ -381,7 +381,7 @@ make_packet(sessp sp) { ("%s: called from wrong state", __func__)); CTR2(KTR_NET, "%20s: called %d", __func__, sp->Session_ID); - dp = (char *)wh->ph.tag; + dp = (char *)(&wh->ph + 1); for (count = 0, tag = sp->neg->tags; ((count < sp->neg->numtags) && (count < NUMTAGS)); tag++, count++) { @@ -434,12 +434,12 @@ pppoe_match_svc(node_p node, const struct pppoe_tag *tag) if (neg->service_len != ntohs(tag->tag_len)) continue; - if (strncmp(tag->tag_data, neg->service.data, + if (strncmp((const char *)(tag + 1), neg->service.data, ntohs(tag->tag_len)) == 0) break; } CTR3(KTR_NET, "%20s: matched %p for %s", __func__, - sp?sp->hook:NULL, tag->tag_data); + sp?sp->hook:NULL, (const char *)(tag + 1)); return (sp?sp->hook:NULL); } @@ -583,7 +583,7 @@ pppoe_finduniq(node_p node, const struct pppoe_tag *tag) hook_p hook = NULL; union uniq uniq; - bcopy(tag->tag_data, uniq.bytes, sizeof(void *)); + bcopy(tag + 1, uniq.bytes, sizeof(void *)); /* Cycle through all known hooks. */ LIST_FOREACH(hook, &node->nd_hooks, hk_hooks) { /* Skip any nonsession hook. */ @@ -1100,7 +1100,7 @@ send_acname(sessp sp, const struct pppoe_tag *tag) sts = (struct ngpppoe_sts *)msg->data; tlen = min(NG_HOOKSIZ - 1, ntohs(tag->tag_len)); - strncpy(sts->hook, tag->tag_data, tlen); + strncpy(sts->hook, (const char *)(tag + 1), tlen); sts->hook[tlen] = '\0'; NG_SEND_MSG_ID(error, NG_HOOK_NODE(sp->hook), msg, sp->creator, 0); @@ -1438,7 +1438,8 @@ ng_pppoe_rcvdata_ether(hook_p hook, item_p item) break; } if (neg->ac_name_len != htons(tag->tag_len) || - strncmp(neg->ac_name.data, tag->tag_data, + strncmp(neg->ac_name.data, + (const char *)(tag + 1), neg->ac_name_len) != 0) { break; } @@ -1767,10 +1768,10 @@ ng_pppoe_disconnect(hook_p hook) * Add a General error message and adjust * sizes. */ - tag = wh->ph.tag; + tag = (void *)(&wh->ph + 1); tag->tag_type = PTT_GEN_ERR; tag->tag_len = htons((u_int16_t)msglen); - strncpy(tag->tag_data, SIGNOFF, msglen); + strncpy((char *)(tag + 1), SIGNOFF, msglen); m->m_pkthdr.len = (m->m_len += sizeof(*tag) + msglen); wh->ph.length = htons(sizeof(*tag) + msglen); @@ -1859,7 +1860,7 @@ scan_tags(sessp sp, const struct pppoe_hdr* ph) { const char *const end = (const char *)next_tag(ph); const char *ptn; - const struct pppoe_tag *pt = &ph->tag[0]; + const struct pppoe_tag *pt = (const void *)(ph + 1); /* * Keep processing tags while a tag header will still fit. diff --git a/sys/netgraph/ng_pppoe.h b/sys/netgraph/ng_pppoe.h index 3360081..d5126cf 100644 --- a/sys/netgraph/ng_pppoe.h +++ b/sys/netgraph/ng_pppoe.h @@ -201,7 +201,6 @@ struct ngpppoe_sts { struct pppoe_tag { u_int16_t tag_type; u_int16_t tag_len; - char tag_data[]; }__packed; struct pppoe_hdr{ @@ -210,7 +209,6 @@ struct pppoe_hdr{ u_int8_t code; u_int16_t sid; u_int16_t length; - struct pppoe_tag tag[]; }__packed; |