···9595 */9696#define LCS_ILLEGAL_OFFSET 0xffff9797#define LCS_IOBUFFERSIZE 0x50009898-#define LCS_NUM_BUFFS 8 /* needs to be power of 2 */9898+#define LCS_NUM_BUFFS 32 /* needs to be power of 2 */9999#define LCS_MAC_LENGTH 6100100#define LCS_INVALID_PORT_NO -1101101#define LCS_LANCMD_TIMEOUT_DEFAULT 5
+45-63
drivers/s390/net/qeth.h
···10761076}1077107710781078static inline int10791079-qeth_isdigit(char * buf)10801080-{10811081- while (*buf) {10821082- if (!isdigit(*buf++))10831083- return 0;10841084- }10851085- return 1;10861086-}10871087-10881088-static inline int10891079qeth_isxdigit(char * buf)10901080{10911081 while (*buf) {···10941104static inline int10951105qeth_string_to_ipaddr4(const char *buf, __u8 *addr)10961106{10971097- const char *start, *end;10981098- char abuf[4];10991099- char *tmp;11001100- int len;11011101- int i;11071107+ int count = 0, rc = 0;11081108+ int in[4];1102110911031103- start = buf;11041104- for (i = 0; i < 4; i++) {11051105- if (i == 3) {11061106- end = strchr(start,0xa);11071107- if (end)11081108- len = end - start;11091109- else 11101110- len = strlen(start);11111111- }11121112- else {11131113- end = strchr(start, '.');11141114- len = end - start;11151115- }11161116- if ((len <= 0) || (len > 3))11101110+ rc = sscanf(buf, "%d.%d.%d.%d%n", 11111111+ &in[0], &in[1], &in[2], &in[3], &count);11121112+ if (rc != 4 || count) 11131113+ return -EINVAL;11141114+ for (count = 0; count < 4; count++) {11151115+ if (in[count] > 255)11171116 return -EINVAL;11181118- memset(abuf, 0, 4);11191119- strncpy(abuf, start, len);11201120- if (!qeth_isdigit(abuf))11211121- return -EINVAL;11221122- addr[i] = simple_strtoul(abuf, &tmp, 10);11231123- start = end + 1;11171117+ addr[count] = in[count];11241118 }11251119 return 0;11261120}···11231149static inline int11241150qeth_string_to_ipaddr6(const char *buf, __u8 *addr)11251151{11261126- const char *start, *end;11271127- u16 *tmp_addr;11281128- char abuf[5];11291129- char *tmp;11301130- int len;11311131- int i;11521152+ char *end, *start;11531153+ __u16 *in;11541154+ char num[5];11551155+ int num2, cnt, out, found, save_cnt;11561156+ unsigned short in_tmp[8] = {0, };1132115711331133- tmp_addr = (u16 *)addr;11341134- start = buf;11351135- for (i = 0; i < 8; i++) {11361136- if (i == 7) {11371137- end = strchr(start,0xa);11381138- if (end)11391139- len = end - start;11401140- else11411141- len = strlen(start);11581158+ cnt = out = found = save_cnt = num2 = 0;11591159+ end = start = (char *) buf;11601160+ in = (__u16 *) addr; 11611161+ memset(in, 0, 16);11621162+ while (end) {11631163+ end = strchr(end,':');11641164+ if (end == NULL) {11651165+ end = (char *)buf + (strlen(buf));11661166+ out = 1;11671167+ }11681168+ if ((end - start)) { 11691169+ memset(num, 0, 5);11701170+ memcpy(num, start, end - start);11711171+ if (!qeth_isxdigit(num))11721172+ return -EINVAL;11731173+ sscanf(start, "%x", &num2);11741174+ if (found)11751175+ in_tmp[save_cnt++] = num2;11761176+ else11771177+ in[cnt++] = num2;11781178+ if (out)11791179+ break;11801180+ } else {11811181+ if (found)11821182+ return -EINVAL;11831183+ found = 1;11421184 }11431143- else {11441144- end = strchr(start, ':');11451145- len = end - start;11461146- }11471147- if ((len <= 0) || (len > 4))11481148- return -EINVAL;11491149- memset(abuf, 0, 5);11501150- strncpy(abuf, start, len);11511151- if (!qeth_isxdigit(abuf))11521152- return -EINVAL;11531153- tmp_addr[i] = simple_strtoul(abuf, &tmp, 16);11541154- start = end + 1;11551155- }11851185+ start = ++end;11861186+ }11871187+ cnt = 7;11881188+ while (save_cnt)11891189+ in[cnt--] = in_tmp[--save_cnt];11561190 return 0;11571191}11581192
+9-2
drivers/s390/net/qeth_eddp.c
···5959 for (i = 0; i < ctx->num_pages; ++i)6060 free_page((unsigned long)ctx->pages[i]);6161 kfree(ctx->pages);6262- if (ctx->elements != NULL)6363- kfree(ctx->elements);6262+ kfree(ctx->elements);6463 kfree(ctx);6564}6665···412413413414 QETH_DBF_TEXT(trace, 5, "eddpftcp");414415 eddp->skb_offset = sizeof(struct qeth_hdr) + eddp->nhl + eddp->thl;416416+ if (eddp->qh.hdr.l2.id == QETH_HEADER_TYPE_LAYER2) {417417+ eddp->skb_offset += sizeof(struct ethhdr);418418+#ifdef CONFIG_QETH_VLAN419419+ if (eddp->mac.h_proto == __constant_htons(ETH_P_8021Q))420420+ eddp->skb_offset += VLAN_HLEN;421421+#endif /* CONFIG_QETH_VLAN */422422+ }415423 tcph = eddp->skb->h.th;416424 while (eddp->skb_offset < eddp->skb->len) {417425 data_len = min((int)skb_shinfo(eddp->skb)->tso_size,···489483 return -ENOMEM;490484 }491485 if (qhdr->hdr.l2.id == QETH_HEADER_TYPE_LAYER2) {486486+ skb->mac.raw = (skb->data) + sizeof(struct qeth_hdr);492487 memcpy(&eddp->mac, eth_hdr(skb), ETH_HLEN);493488#ifdef CONFIG_QETH_VLAN494489 if (eddp->mac.h_proto == __constant_htons(ETH_P_8021Q)) {
+7-10
drivers/s390/net/qeth_main.c
···516516 QETH_DBF_TEXT(setup, 3, "setoffl");517517 QETH_DBF_HEX(setup, 3, &card, sizeof(void *));518518519519- netif_carrier_off(card->dev);519519+ if (card->dev && netif_carrier_ok(card->dev))520520+ netif_carrier_off(card->dev);520521 recover_flag = card->state;521522 if (qeth_stop_card(card, recovery_mode) == -ERESTARTSYS){522523 PRINT_WARN("Stopping card %s interrupted by user!\n",···16801679 spin_unlock_irqrestore(&reply->card->lock, flags);16811680}1682168116821682+16831683static struct qeth_ipa_cmd *16841684qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob)16851685{···17011699 QETH_CARD_IFNAME(card),17021700 card->info.chpid);17031701 card->lan_online = 0;17041704- netif_carrier_off(card->dev);17021702+ if (card->dev && netif_carrier_ok(card->dev))17031703+ netif_carrier_off(card->dev);17051704 return NULL;17061705 case IPA_CMD_STARTLAN:17071706 PRINT_INFO("Link reestablished on %s "···55655562 if (card->info.type == QETH_CARD_TYPE_OSN)55665563 return ;5567556455685568- QETH_DBF_TEXT(trace,3,"setmulti");55655565+ QETH_DBF_TEXT(trace, 3, "setmulti");55695566 qeth_delete_mc_addresses(card);55705567 if (card->options.layer2) {55715568 qeth_layer2_add_multicast(card);···55825579 return;55835580 if (qeth_set_thread_start_bit(card, QETH_SET_PROMISC_MODE_THREAD)==0)55845581 schedule_work(&card->kernel_thread_starter);55855585-55865582}5587558355885584static int···74547452 card->lan_online = 1;74557453 if (card->info.type==QETH_CARD_TYPE_OSN)74567454 goto out;74557455+ qeth_set_large_send(card, card->options.large_send);74577456 if (card->options.layer2) {74587457 card->dev->features |=74597458 NETIF_F_HW_VLAN_FILTER |···74717468#endif74727469 goto out;74737470 }74747474- if ((card->options.large_send == QETH_LARGE_SEND_EDDP) ||74757475- (card->options.large_send == QETH_LARGE_SEND_TSO))74767476- card->dev->features |= NETIF_F_TSO | NETIF_F_SG;74777477- else74787478- card->dev->features &= ~(NETIF_F_TSO | NETIF_F_SG);74797479-74807471 if ((rc = qeth_setadapter_parms(card)))74817472 QETH_DBF_TEXT_(setup, 2, "2err%d", rc);74827473 if ((rc = qeth_start_ipassists(card)))