--- libaitrpc/src/srv.c 2014/12/19 02:12:49 1.23.6.7 +++ libaitrpc/src/srv.c 2015/01/15 20:31:18 1.24.2.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.23.6.7 2014/12/19 02:12:49 misho Exp $ +* $Id: srv.c,v 1.24.2.1 2015/01/15 20:31:18 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -63,12 +63,15 @@ static void *txUDPPacket(sched_task_t *); static void *rxBPFPacket(sched_task_t *); static void *txBPFPacket(sched_task_t *); -static sched_task_func_t cbProto[SOCK_BPF + 1][4] = { +/* SOCK_PIPE */ + +static sched_task_func_t cbProto[SOCK_MAX_SUPPORT][4] = { { acceptClients, closeClient, rxPacket, txPacket }, /* SOCK_STREAM */ { acceptClients, closeClient, rxPacket, txPacket }, /* SOCK_STREAM */ { rxUDPPacket, freeClient, rxUDPPacket, txUDPPacket }, /* SOCK_DGRAM */ { NULL, NULL, NULL, NULL }, /* SOCK_RAW */ - { rxBPFPacket, freeClient, rxBPFPacket, txBPFPacket } /* SOCK_BPF */ + { rxBPFPacket, freeClient, rxBPFPacket, txBPFPacket }, /* SOCK_BPF */ + { NULL, NULL, NULL, NULL } /* SOCK_PIPE */ }; /* Global Signal Argument when kqueue support disabled */ @@ -729,7 +732,7 @@ rxBPFPacket(sched_task_t *task) rlen = read(TASK_FD(task), AIT_GET_BUF(&b), AIT_LEN(&b)); h = (struct bpf_hdr*) AIT_GET_BUF(&b); rlen -= h->bh_hdrlen; - if (rlen < h->bh_caplen || h->bh_caplen != h->bh_datalen || + if (rlen < h->bh_datalen || h->bh_caplen != h->bh_datalen || rlen < ETHER_HDR_LEN + sizeof(struct tagRPCCall)) { rpc_SetErr(ERPCMISMATCH, "Short RPC packet"); goto end;