diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/core/filter.c | 198 |
1 files changed, 99 insertions, 99 deletions
diff --git a/net/core/filter.c b/net/core/filter.c index 6bd2e350e751..b3f21751b238 100644 --- a/net/core/filter.c +++ b/net/core/filter.c | |||
@@ -59,12 +59,12 @@ | |||
59 | #define BPF_R10 regs[BPF_REG_10] | 59 | #define BPF_R10 regs[BPF_REG_10] |
60 | 60 | ||
61 | /* Named registers */ | 61 | /* Named registers */ |
62 | #define A regs[insn->a_reg] | 62 | #define DST regs[insn->dst_reg] |
63 | #define X regs[insn->x_reg] | 63 | #define SRC regs[insn->src_reg] |
64 | #define FP regs[BPF_REG_FP] | 64 | #define FP regs[BPF_REG_FP] |
65 | #define ARG1 regs[BPF_REG_ARG1] | 65 | #define ARG1 regs[BPF_REG_ARG1] |
66 | #define CTX regs[BPF_REG_CTX] | 66 | #define CTX regs[BPF_REG_CTX] |
67 | #define K insn->imm | 67 | #define IMM insn->imm |
68 | 68 | ||
69 | /* No hurry in this branch | 69 | /* No hurry in this branch |
70 | * | 70 | * |
@@ -264,7 +264,7 @@ static unsigned int __sk_run_filter(void *ctx, const struct sock_filter_int *ins | |||
264 | FP = (u64) (unsigned long) &stack[ARRAY_SIZE(stack)]; | 264 | FP = (u64) (unsigned long) &stack[ARRAY_SIZE(stack)]; |
265 | ARG1 = (u64) (unsigned long) ctx; | 265 | ARG1 = (u64) (unsigned long) ctx; |
266 | 266 | ||
267 | /* Register for user BPF programs need to be reset first. */ | 267 | /* Registers used in classic BPF programs need to be reset first. */ |
268 | regs[BPF_REG_A] = 0; | 268 | regs[BPF_REG_A] = 0; |
269 | regs[BPF_REG_X] = 0; | 269 | regs[BPF_REG_X] = 0; |
270 | 270 | ||
@@ -274,16 +274,16 @@ select_insn: | |||
274 | /* ALU */ | 274 | /* ALU */ |
275 | #define ALU(OPCODE, OP) \ | 275 | #define ALU(OPCODE, OP) \ |
276 | ALU64_##OPCODE##_X: \ | 276 | ALU64_##OPCODE##_X: \ |
277 | A = A OP X; \ | 277 | DST = DST OP SRC; \ |
278 | CONT; \ | 278 | CONT; \ |
279 | ALU_##OPCODE##_X: \ | 279 | ALU_##OPCODE##_X: \ |
280 | A = (u32) A OP (u32) X; \ | 280 | DST = (u32) DST OP (u32) SRC; \ |
281 | CONT; \ | 281 | CONT; \ |
282 | ALU64_##OPCODE##_K: \ | 282 | ALU64_##OPCODE##_K: \ |
283 | A = A OP K; \ | 283 | DST = DST OP IMM; \ |
284 | CONT; \ | 284 | CONT; \ |
285 | ALU_##OPCODE##_K: \ | 285 | ALU_##OPCODE##_K: \ |
286 | A = (u32) A OP (u32) K; \ | 286 | DST = (u32) DST OP (u32) IMM; \ |
287 | CONT; | 287 | CONT; |
288 | 288 | ||
289 | ALU(ADD, +) | 289 | ALU(ADD, +) |
@@ -296,92 +296,92 @@ select_insn: | |||
296 | ALU(MUL, *) | 296 | ALU(MUL, *) |
297 | #undef ALU | 297 | #undef ALU |
298 | ALU_NEG: | 298 | ALU_NEG: |
299 | A = (u32) -A; | 299 | DST = (u32) -DST; |
300 | CONT; | 300 | CONT; |
301 | ALU64_NEG: | 301 | ALU64_NEG: |
302 | A = -A; | 302 | DST = -DST; |
303 | CONT; | 303 | CONT; |
304 | ALU_MOV_X: | 304 | ALU_MOV_X: |
305 | A = (u32) X; | 305 | DST = (u32) SRC; |
306 | CONT; | 306 | CONT; |
307 | ALU_MOV_K: | 307 | ALU_MOV_K: |
308 | A = (u32) K; | 308 | DST = (u32) IMM; |
309 | CONT; | 309 | CONT; |
310 | ALU64_MOV_X: | 310 | ALU64_MOV_X: |
311 | A = X; | 311 | DST = SRC; |
312 | CONT; | 312 | CONT; |
313 | ALU64_MOV_K: | 313 | ALU64_MOV_K: |
314 | A = K; | 314 | DST = IMM; |
315 | CONT; | 315 | CONT; |
316 | ALU64_ARSH_X: | 316 | ALU64_ARSH_X: |
317 | (*(s64 *) &A) >>= X; | 317 | (*(s64 *) &DST) >>= SRC; |
318 | CONT; | 318 | CONT; |
319 | ALU64_ARSH_K: | 319 | ALU64_ARSH_K: |
320 | (*(s64 *) &A) >>= K; | 320 | (*(s64 *) &DST) >>= IMM; |
321 | CONT; | 321 | CONT; |
322 | ALU64_MOD_X: | 322 | ALU64_MOD_X: |
323 | if (unlikely(X == 0)) | 323 | if (unlikely(SRC == 0)) |
324 | return 0; | 324 | return 0; |
325 | tmp = A; | 325 | tmp = DST; |
326 | A = do_div(tmp, X); | 326 | DST = do_div(tmp, SRC); |
327 | CONT; | 327 | CONT; |
328 | ALU_MOD_X: | 328 | ALU_MOD_X: |
329 | if (unlikely(X == 0)) | 329 | if (unlikely(SRC == 0)) |
330 | return 0; | 330 | return 0; |
331 | tmp = (u32) A; | 331 | tmp = (u32) DST; |
332 | A = do_div(tmp, (u32) X); | 332 | DST = do_div(tmp, (u32) SRC); |
333 | CONT; | 333 | CONT; |
334 | ALU64_MOD_K: | 334 | ALU64_MOD_K: |
335 | tmp = A; | 335 | tmp = DST; |
336 | A = do_div(tmp, K); | 336 | DST = do_div(tmp, IMM); |
337 | CONT; | 337 | CONT; |
338 | ALU_MOD_K: | 338 | ALU_MOD_K: |
339 | tmp = (u32) A; | 339 | tmp = (u32) DST; |
340 | A = do_div(tmp, (u32) K); | 340 | DST = do_div(tmp, (u32) IMM); |
341 | CONT; | 341 | CONT; |
342 | ALU64_DIV_X: | 342 | ALU64_DIV_X: |
343 | if (unlikely(X == 0)) | 343 | if (unlikely(SRC == 0)) |
344 | return 0; | 344 | return 0; |
345 | do_div(A, X); | 345 | do_div(DST, SRC); |
346 | CONT; | 346 | CONT; |
347 | ALU_DIV_X: | 347 | ALU_DIV_X: |
348 | if (unlikely(X == 0)) | 348 | if (unlikely(SRC == 0)) |
349 | return 0; | 349 | return 0; |
350 | tmp = (u32) A; | 350 | tmp = (u32) DST; |
351 | do_div(tmp, (u32) X); | 351 | do_div(tmp, (u32) SRC); |
352 | A = (u32) tmp; | 352 | DST = (u32) tmp; |
353 | CONT; | 353 | CONT; |
354 | ALU64_DIV_K: | 354 | ALU64_DIV_K: |
355 | do_div(A, K); | 355 | do_div(DST, IMM); |
356 | CONT; | 356 | CONT; |
357 | ALU_DIV_K: | 357 | ALU_DIV_K: |
358 | tmp = (u32) A; | 358 | tmp = (u32) DST; |
359 | do_div(tmp, (u32) K); | 359 | do_div(tmp, (u32) IMM); |
360 | A = (u32) tmp; | 360 | DST = (u32) tmp; |
361 | CONT; | 361 | CONT; |
362 | ALU_END_TO_BE: | 362 | ALU_END_TO_BE: |
363 | switch (K) { | 363 | switch (IMM) { |
364 | case 16: | 364 | case 16: |
365 | A = (__force u16) cpu_to_be16(A); | 365 | DST = (__force u16) cpu_to_be16(DST); |
366 | break; | 366 | break; |
367 | case 32: | 367 | case 32: |
368 | A = (__force u32) cpu_to_be32(A); | 368 | DST = (__force u32) cpu_to_be32(DST); |
369 | break; | 369 | break; |
370 | case 64: | 370 | case 64: |
371 | A = (__force u64) cpu_to_be64(A); | 371 | DST = (__force u64) cpu_to_be64(DST); |
372 | break; | 372 | break; |
373 | } | 373 | } |
374 | CONT; | 374 | CONT; |
375 | ALU_END_TO_LE: | 375 | ALU_END_TO_LE: |
376 | switch (K) { | 376 | switch (IMM) { |
377 | case 16: | 377 | case 16: |
378 | A = (__force u16) cpu_to_le16(A); | 378 | DST = (__force u16) cpu_to_le16(DST); |
379 | break; | 379 | break; |
380 | case 32: | 380 | case 32: |
381 | A = (__force u32) cpu_to_le32(A); | 381 | DST = (__force u32) cpu_to_le32(DST); |
382 | break; | 382 | break; |
383 | case 64: | 383 | case 64: |
384 | A = (__force u64) cpu_to_le64(A); | 384 | DST = (__force u64) cpu_to_le64(DST); |
385 | break; | 385 | break; |
386 | } | 386 | } |
387 | CONT; | 387 | CONT; |
@@ -401,85 +401,85 @@ select_insn: | |||
401 | insn += insn->off; | 401 | insn += insn->off; |
402 | CONT; | 402 | CONT; |
403 | JMP_JEQ_X: | 403 | JMP_JEQ_X: |
404 | if (A == X) { | 404 | if (DST == SRC) { |
405 | insn += insn->off; | 405 | insn += insn->off; |
406 | CONT_JMP; | 406 | CONT_JMP; |
407 | } | 407 | } |
408 | CONT; | 408 | CONT; |
409 | JMP_JEQ_K: | 409 | JMP_JEQ_K: |
410 | if (A == K) { | 410 | if (DST == IMM) { |
411 | insn += insn->off; | 411 | insn += insn->off; |
412 | CONT_JMP; | 412 | CONT_JMP; |
413 | } | 413 | } |
414 | CONT; | 414 | CONT; |
415 | JMP_JNE_X: | 415 | JMP_JNE_X: |
416 | if (A != X) { | 416 | if (DST != SRC) { |
417 | insn += insn->off; | 417 | insn += insn->off; |
418 | CONT_JMP; | 418 | CONT_JMP; |
419 | } | 419 | } |
420 | CONT; | 420 | CONT; |
421 | JMP_JNE_K: | 421 | JMP_JNE_K: |
422 | if (A != K) { | 422 | if (DST != IMM) { |
423 | insn += insn->off; | 423 | insn += insn->off; |
424 | CONT_JMP; | 424 | CONT_JMP; |
425 | } | 425 | } |
426 | CONT; | 426 | CONT; |
427 | JMP_JGT_X: | 427 | JMP_JGT_X: |
428 | if (A > X) { | 428 | if (DST > SRC) { |
429 | insn += insn->off; | 429 | insn += insn->off; |
430 | CONT_JMP; | 430 | CONT_JMP; |
431 | } | 431 | } |
432 | CONT; | 432 | CONT; |
433 | JMP_JGT_K: | 433 | JMP_JGT_K: |
434 | if (A > K) { | 434 | if (DST > IMM) { |
435 | insn += insn->off; | 435 | insn += insn->off; |
436 | CONT_JMP; | 436 | CONT_JMP; |
437 | } | 437 | } |
438 | CONT; | 438 | CONT; |
439 | JMP_JGE_X: | 439 | JMP_JGE_X: |
440 | if (A >= X) { | 440 | if (DST >= SRC) { |
441 | insn += insn->off; | 441 | insn += insn->off; |
442 | CONT_JMP; | 442 | CONT_JMP; |
443 | } | 443 | } |
444 | CONT; | 444 | CONT; |
445 | JMP_JGE_K: | 445 | JMP_JGE_K: |
446 | if (A >= K) { | 446 | if (DST >= IMM) { |
447 | insn += insn->off; | 447 | insn += insn->off; |
448 | CONT_JMP; | 448 | CONT_JMP; |
449 | } | 449 | } |
450 | CONT; | 450 | CONT; |
451 | JMP_JSGT_X: | 451 | JMP_JSGT_X: |
452 | if (((s64) A) > ((s64) X)) { | 452 | if (((s64) DST) > ((s64) SRC)) { |
453 | insn += insn->off; | 453 | insn += insn->off; |
454 | CONT_JMP; | 454 | CONT_JMP; |
455 | } | 455 | } |
456 | CONT; | 456 | CONT; |
457 | JMP_JSGT_K: | 457 | JMP_JSGT_K: |
458 | if (((s64) A) > ((s64) K)) { | 458 | if (((s64) DST) > ((s64) IMM)) { |
459 | insn += insn->off; | 459 | insn += insn->off; |
460 | CONT_JMP; | 460 | CONT_JMP; |
461 | } | 461 | } |
462 | CONT; | 462 | CONT; |
463 | JMP_JSGE_X: | 463 | JMP_JSGE_X: |
464 | if (((s64) A) >= ((s64) X)) { | 464 | if (((s64) DST) >= ((s64) SRC)) { |
465 | insn += insn->off; | 465 | insn += insn->off; |
466 | CONT_JMP; | 466 | CONT_JMP; |
467 | } | 467 | } |
468 | CONT; | 468 | CONT; |
469 | JMP_JSGE_K: | 469 | JMP_JSGE_K: |
470 | if (((s64) A) >= ((s64) K)) { | 470 | if (((s64) DST) >= ((s64) IMM)) { |
471 | insn += insn->off; | 471 | insn += insn->off; |
472 | CONT_JMP; | 472 | CONT_JMP; |
473 | } | 473 | } |
474 | CONT; | 474 | CONT; |
475 | JMP_JSET_X: | 475 | JMP_JSET_X: |
476 | if (A & X) { | 476 | if (DST & SRC) { |
477 | insn += insn->off; | 477 | insn += insn->off; |
478 | CONT_JMP; | 478 | CONT_JMP; |
479 | } | 479 | } |
480 | CONT; | 480 | CONT; |
481 | JMP_JSET_K: | 481 | JMP_JSET_K: |
482 | if (A & K) { | 482 | if (DST & IMM) { |
483 | insn += insn->off; | 483 | insn += insn->off; |
484 | CONT_JMP; | 484 | CONT_JMP; |
485 | } | 485 | } |
@@ -488,15 +488,15 @@ select_insn: | |||
488 | return BPF_R0; | 488 | return BPF_R0; |
489 | 489 | ||
490 | /* STX and ST and LDX*/ | 490 | /* STX and ST and LDX*/ |
491 | #define LDST(SIZEOP, SIZE) \ | 491 | #define LDST(SIZEOP, SIZE) \ |
492 | STX_MEM_##SIZEOP: \ | 492 | STX_MEM_##SIZEOP: \ |
493 | *(SIZE *)(unsigned long) (A + insn->off) = X; \ | 493 | *(SIZE *)(unsigned long) (DST + insn->off) = SRC; \ |
494 | CONT; \ | 494 | CONT; \ |
495 | ST_MEM_##SIZEOP: \ | 495 | ST_MEM_##SIZEOP: \ |
496 | *(SIZE *)(unsigned long) (A + insn->off) = K; \ | 496 | *(SIZE *)(unsigned long) (DST + insn->off) = IMM; \ |
497 | CONT; \ | 497 | CONT; \ |
498 | LDX_MEM_##SIZEOP: \ | 498 | LDX_MEM_##SIZEOP: \ |
499 | A = *(SIZE *)(unsigned long) (X + insn->off); \ | 499 | DST = *(SIZE *)(unsigned long) (SRC + insn->off); \ |
500 | CONT; | 500 | CONT; |
501 | 501 | ||
502 | LDST(B, u8) | 502 | LDST(B, u8) |
@@ -504,16 +504,16 @@ select_insn: | |||
504 | LDST(W, u32) | 504 | LDST(W, u32) |
505 | LDST(DW, u64) | 505 | LDST(DW, u64) |
506 | #undef LDST | 506 | #undef LDST |
507 | STX_XADD_W: /* lock xadd *(u32 *)(A + insn->off) += X */ | 507 | STX_XADD_W: /* lock xadd *(u32 *)(dst_reg + off16) += src_reg */ |
508 | atomic_add((u32) X, (atomic_t *)(unsigned long) | 508 | atomic_add((u32) SRC, (atomic_t *)(unsigned long) |
509 | (A + insn->off)); | 509 | (DST + insn->off)); |
510 | CONT; | 510 | CONT; |
511 | STX_XADD_DW: /* lock xadd *(u64 *)(A + insn->off) += X */ | 511 | STX_XADD_DW: /* lock xadd *(u64 *)(dst_reg + off16) += src_reg */ |
512 | atomic64_add((u64) X, (atomic64_t *)(unsigned long) | 512 | atomic64_add((u64) SRC, (atomic64_t *)(unsigned long) |
513 | (A + insn->off)); | 513 | (DST + insn->off)); |
514 | CONT; | 514 | CONT; |
515 | LD_ABS_W: /* BPF_R0 = ntohl(*(u32 *) (skb->data + K)) */ | 515 | LD_ABS_W: /* BPF_R0 = ntohl(*(u32 *) (skb->data + imm32)) */ |
516 | off = K; | 516 | off = IMM; |
517 | load_word: | 517 | load_word: |
518 | /* BPF_LD + BPD_ABS and BPF_LD + BPF_IND insns are | 518 | /* BPF_LD + BPD_ABS and BPF_LD + BPF_IND insns are |
519 | * only appearing in the programs where ctx == | 519 | * only appearing in the programs where ctx == |
@@ -527,51 +527,51 @@ load_word: | |||
527 | * BPF_R6-BPF_R9, and store return value into BPF_R0. | 527 | * BPF_R6-BPF_R9, and store return value into BPF_R0. |
528 | * | 528 | * |
529 | * Implicit input: | 529 | * Implicit input: |
530 | * ctx | 530 | * ctx == skb == BPF_R6 == CTX |
531 | * | 531 | * |
532 | * Explicit input: | 532 | * Explicit input: |
533 | * X == any register | 533 | * SRC == any register |
534 | * K == 32-bit immediate | 534 | * IMM == 32-bit immediate |
535 | * | 535 | * |
536 | * Output: | 536 | * Output: |
537 | * BPF_R0 - 8/16/32-bit skb data converted to cpu endianness | 537 | * BPF_R0 - 8/16/32-bit skb data converted to cpu endianness |
538 | */ | 538 | */ |
539 | 539 | ||
540 | ptr = load_pointer((struct sk_buff *) ctx, off, 4, &tmp); | 540 | ptr = load_pointer((struct sk_buff *) CTX, off, 4, &tmp); |
541 | if (likely(ptr != NULL)) { | 541 | if (likely(ptr != NULL)) { |
542 | BPF_R0 = get_unaligned_be32(ptr); | 542 | BPF_R0 = get_unaligned_be32(ptr); |
543 | CONT; | 543 | CONT; |
544 | } | 544 | } |
545 | 545 | ||
546 | return 0; | 546 | return 0; |
547 | LD_ABS_H: /* BPF_R0 = ntohs(*(u16 *) (skb->data + K)) */ | 547 | LD_ABS_H: /* BPF_R0 = ntohs(*(u16 *) (skb->data + imm32)) */ |
548 | off = K; | 548 | off = IMM; |
549 | load_half: | 549 | load_half: |
550 | ptr = load_pointer((struct sk_buff *) ctx, off, 2, &tmp); | 550 | ptr = load_pointer((struct sk_buff *) CTX, off, 2, &tmp); |
551 | if (likely(ptr != NULL)) { | 551 | if (likely(ptr != NULL)) { |
552 | BPF_R0 = get_unaligned_be16(ptr); | 552 | BPF_R0 = get_unaligned_be16(ptr); |
553 | CONT; | 553 | CONT; |
554 | } | 554 | } |
555 | 555 | ||
556 | return 0; | 556 | return 0; |
557 | LD_ABS_B: /* BPF_R0 = *(u8 *) (ctx + K) */ | 557 | LD_ABS_B: /* BPF_R0 = *(u8 *) (skb->data + imm32) */ |
558 | off = K; | 558 | off = IMM; |
559 | load_byte: | 559 | load_byte: |
560 | ptr = load_pointer((struct sk_buff *) ctx, off, 1, &tmp); | 560 | ptr = load_pointer((struct sk_buff *) CTX, off, 1, &tmp); |
561 | if (likely(ptr != NULL)) { | 561 | if (likely(ptr != NULL)) { |
562 | BPF_R0 = *(u8 *)ptr; | 562 | BPF_R0 = *(u8 *)ptr; |
563 | CONT; | 563 | CONT; |
564 | } | 564 | } |
565 | 565 | ||
566 | return 0; | 566 | return 0; |
567 | LD_IND_W: /* BPF_R0 = ntohl(*(u32 *) (skb->data + X + K)) */ | 567 | LD_IND_W: /* BPF_R0 = ntohl(*(u32 *) (skb->data + src_reg + imm32)) */ |
568 | off = K + X; | 568 | off = IMM + SRC; |
569 | goto load_word; | 569 | goto load_word; |
570 | LD_IND_H: /* BPF_R0 = ntohs(*(u16 *) (skb->data + X + K)) */ | 570 | LD_IND_H: /* BPF_R0 = ntohs(*(u16 *) (skb->data + src_reg + imm32)) */ |
571 | off = K + X; | 571 | off = IMM + SRC; |
572 | goto load_half; | 572 | goto load_half; |
573 | LD_IND_B: /* BPF_R0 = *(u8 *) (skb->data + X + K) */ | 573 | LD_IND_B: /* BPF_R0 = *(u8 *) (skb->data + src_reg + imm32) */ |
574 | off = K + X; | 574 | off = IMM + SRC; |
575 | goto load_byte; | 575 | goto load_byte; |
576 | 576 | ||
577 | default_label: | 577 | default_label: |
@@ -675,7 +675,7 @@ static bool convert_bpf_extensions(struct sock_filter *fp, | |||
675 | case SKF_AD_OFF + SKF_AD_PROTOCOL: | 675 | case SKF_AD_OFF + SKF_AD_PROTOCOL: |
676 | BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, protocol) != 2); | 676 | BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, protocol) != 2); |
677 | 677 | ||
678 | /* A = *(u16 *) (ctx + offsetof(protocol)) */ | 678 | /* A = *(u16 *) (CTX + offsetof(protocol)) */ |
679 | *insn++ = BPF_LDX_MEM(BPF_H, BPF_REG_A, BPF_REG_CTX, | 679 | *insn++ = BPF_LDX_MEM(BPF_H, BPF_REG_A, BPF_REG_CTX, |
680 | offsetof(struct sk_buff, protocol)); | 680 | offsetof(struct sk_buff, protocol)); |
681 | /* A = ntohs(A) [emitting a nop or swap16] */ | 681 | /* A = ntohs(A) [emitting a nop or swap16] */ |
@@ -741,7 +741,7 @@ static bool convert_bpf_extensions(struct sock_filter *fp, | |||
741 | BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, vlan_tci) != 2); | 741 | BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, vlan_tci) != 2); |
742 | BUILD_BUG_ON(VLAN_TAG_PRESENT != 0x1000); | 742 | BUILD_BUG_ON(VLAN_TAG_PRESENT != 0x1000); |
743 | 743 | ||
744 | /* A = *(u16 *) (ctx + offsetof(vlan_tci)) */ | 744 | /* A = *(u16 *) (CTX + offsetof(vlan_tci)) */ |
745 | *insn++ = BPF_LDX_MEM(BPF_H, BPF_REG_A, BPF_REG_CTX, | 745 | *insn++ = BPF_LDX_MEM(BPF_H, BPF_REG_A, BPF_REG_CTX, |
746 | offsetof(struct sk_buff, vlan_tci)); | 746 | offsetof(struct sk_buff, vlan_tci)); |
747 | if (fp->k == SKF_AD_OFF + SKF_AD_VLAN_TAG) { | 747 | if (fp->k == SKF_AD_OFF + SKF_AD_VLAN_TAG) { |
@@ -760,13 +760,13 @@ static bool convert_bpf_extensions(struct sock_filter *fp, | |||
760 | case SKF_AD_OFF + SKF_AD_NLATTR_NEST: | 760 | case SKF_AD_OFF + SKF_AD_NLATTR_NEST: |
761 | case SKF_AD_OFF + SKF_AD_CPU: | 761 | case SKF_AD_OFF + SKF_AD_CPU: |
762 | case SKF_AD_OFF + SKF_AD_RANDOM: | 762 | case SKF_AD_OFF + SKF_AD_RANDOM: |
763 | /* arg1 = ctx */ | 763 | /* arg1 = CTX */ |
764 | *insn++ = BPF_MOV64_REG(BPF_REG_ARG1, BPF_REG_CTX); | 764 | *insn++ = BPF_MOV64_REG(BPF_REG_ARG1, BPF_REG_CTX); |
765 | /* arg2 = A */ | 765 | /* arg2 = A */ |
766 | *insn++ = BPF_MOV64_REG(BPF_REG_ARG2, BPF_REG_A); | 766 | *insn++ = BPF_MOV64_REG(BPF_REG_ARG2, BPF_REG_A); |
767 | /* arg3 = X */ | 767 | /* arg3 = X */ |
768 | *insn++ = BPF_MOV64_REG(BPF_REG_ARG3, BPF_REG_X); | 768 | *insn++ = BPF_MOV64_REG(BPF_REG_ARG3, BPF_REG_X); |
769 | /* Emit call(ctx, arg2=A, arg3=X) */ | 769 | /* Emit call(arg1=CTX, arg2=A, arg3=X) */ |
770 | switch (fp->k) { | 770 | switch (fp->k) { |
771 | case SKF_AD_OFF + SKF_AD_PAY_OFFSET: | 771 | case SKF_AD_OFF + SKF_AD_PAY_OFFSET: |
772 | *insn = BPF_EMIT_CALL(__skb_get_pay_offset); | 772 | *insn = BPF_EMIT_CALL(__skb_get_pay_offset); |
@@ -941,12 +941,12 @@ do_pass: | |||
941 | */ | 941 | */ |
942 | *insn++ = BPF_MOV32_IMM(BPF_REG_TMP, fp->k); | 942 | *insn++ = BPF_MOV32_IMM(BPF_REG_TMP, fp->k); |
943 | 943 | ||
944 | insn->a_reg = BPF_REG_A; | 944 | insn->dst_reg = BPF_REG_A; |
945 | insn->x_reg = BPF_REG_TMP; | 945 | insn->src_reg = BPF_REG_TMP; |
946 | bpf_src = BPF_X; | 946 | bpf_src = BPF_X; |
947 | } else { | 947 | } else { |
948 | insn->a_reg = BPF_REG_A; | 948 | insn->dst_reg = BPF_REG_A; |
949 | insn->x_reg = BPF_REG_X; | 949 | insn->src_reg = BPF_REG_X; |
950 | insn->imm = fp->k; | 950 | insn->imm = fp->k; |
951 | bpf_src = BPF_SRC(fp->code); | 951 | bpf_src = BPF_SRC(fp->code); |
952 | } | 952 | } |