2021-10-12 01:33:58

by Gaosheng Cui

[permalink] [raw]
Subject: [PATCH -next] audit: return early if the rule has a lower priority

It is not necessary for audit_filter_rules() functions to check
audit fileds of the rule with a lower priority, and if we did,
there might be some unintended effects, such as the ctx->ppid
may be changed unexpectedly, so return early if the rule has
a lower priority.

Signed-off-by: Gaosheng Cui <[email protected]>
---
kernel/auditsc.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index 4ba3b8573ff4..eee14dfad0fa 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -470,6 +470,9 @@ static int audit_filter_rules(struct task_struct *tsk,
u32 sid;
unsigned int sessionid;

+ if (ctx && rule->prio <= ctx->prio)
+ return 0;
+
cred = rcu_dereference_check(tsk->cred, tsk == current || task_creation);

for (i = 0; i < rule->field_count; i++) {
@@ -737,8 +740,6 @@ static int audit_filter_rules(struct task_struct *tsk,
}

if (ctx) {
- if (rule->prio <= ctx->prio)
- return 0;
if (rule->filterkey) {
kfree(ctx->filterkey);
ctx->filterkey = kstrdup(rule->filterkey, GFP_ATOMIC);
--
2.30.0


2021-10-13 07:23:05

by Dan Carpenter

[permalink] [raw]
Subject: Re: [PATCH -next] audit: return early if the rule has a lower priority

[ It's Gaosheng's patch which triggers the warning but I think it's
actually the dereference which should be changed. I've added Richard
to the CC list. -dan ]

Hi Gaosheng,

url: https://github.com/0day-ci/linux/commits/Gaosheng-Cui/audit-return-early-if-the-rule-has-a-lower-priority/20211012-093102
base: d3134eb5de8546a214c028fb7195e764b89da7d4
config: x86_64-randconfig-m001-20211012 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
kernel/auditsc.c:653 audit_filter_rules() error: we previously assumed 'ctx' could be null (see line 473)

vim +/ctx +653 kernel/auditsc.c

^1da177e4c3f41 Linus Torvalds 2005-04-16 461 static int audit_filter_rules(struct task_struct *tsk,
93315ed6dd12da Amy Griffis 2006-02-07 462 struct audit_krule *rule,
^1da177e4c3f41 Linus Torvalds 2005-04-16 463 struct audit_context *ctx,
f368c07d7214a7 Amy Griffis 2006-04-07 464 struct audit_names *name,
f562988350361b Tony Jones 2011-04-27 465 enum audit_state *state,
f562988350361b Tony Jones 2011-04-27 466 bool task_creation)
^1da177e4c3f41 Linus Torvalds 2005-04-16 467 {
f562988350361b Tony Jones 2011-04-27 468 const struct cred *cred;
5195d8e217a786 Eric Paris 2012-01-03 469 int i, need_sid = 1;
3dc7e3153eddfc Darrel Goeddel 2006-03-10 470 u32 sid;
8fae47705685fc Richard Guy Briggs 2016-11-20 471 unsigned int sessionid;
3dc7e3153eddfc Darrel Goeddel 2006-03-10 472
046a8e46eefb9d Gaosheng Cui 2021-10-12 @473 if (ctx && rule->prio <= ctx->prio)
^^^
Checked here.

046a8e46eefb9d Gaosheng Cui 2021-10-12 474 return 0;
046a8e46eefb9d Gaosheng Cui 2021-10-12 475
f562988350361b Tony Jones 2011-04-27 476 cred = rcu_dereference_check(tsk->cred, tsk == current || task_creation);
f562988350361b Tony Jones 2011-04-27 477
^1da177e4c3f41 Linus Torvalds 2005-04-16 478 for (i = 0; i < rule->field_count; i++) {
93315ed6dd12da Amy Griffis 2006-02-07 479 struct audit_field *f = &rule->fields[i];
5195d8e217a786 Eric Paris 2012-01-03 480 struct audit_names *n;
^1da177e4c3f41 Linus Torvalds 2005-04-16 481 int result = 0;
f1dc4867ff41b7 Richard Guy Briggs 2013-12-11 482 pid_t pid;
^1da177e4c3f41 Linus Torvalds 2005-04-16 483
93315ed6dd12da Amy Griffis 2006-02-07 484 switch (f->type) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 485 case AUDIT_PID:
fa2bea2f5cca5b Paul Moore 2016-08-30 486 pid = task_tgid_nr(tsk);
f1dc4867ff41b7 Richard Guy Briggs 2013-12-11 487 result = audit_comparator(pid, f->op, f->val);
^1da177e4c3f41 Linus Torvalds 2005-04-16 488 break;
3c66251e573219 Al Viro 2006-05-06 489 case AUDIT_PPID:
419c58f11fb732 Alexander Viro 2006-09-29 490 if (ctx) {
419c58f11fb732 Alexander Viro 2006-09-29 491 if (!ctx->ppid)
c92cdeb45eea38 Richard Guy Briggs 2013-12-10 492 ctx->ppid = task_ppid_nr(tsk);
3c66251e573219 Al Viro 2006-05-06 493 result = audit_comparator(ctx->ppid, f->op, f->val);
419c58f11fb732 Alexander Viro 2006-09-29 494 }
3c66251e573219 Al Viro 2006-05-06 495 break;
34d99af52ad40b Richard Guy Briggs 2015-08-05 496 case AUDIT_EXE:
34d99af52ad40b Richard Guy Briggs 2015-08-05 497 result = audit_exe_compare(tsk, rule->exe);
23bcc480dac204 Ondrej Mosnáček 2018-04-09 498 if (f->op == Audit_not_equal)
23bcc480dac204 Ondrej Mosnáček 2018-04-09 499 result = !result;
34d99af52ad40b Richard Guy Briggs 2015-08-05 500 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 501 case AUDIT_UID:
ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 502 result = audit_uid_comparator(cred->uid, f->op, f->uid);
^1da177e4c3f41 Linus Torvalds 2005-04-16 503 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 504 case AUDIT_EUID:
ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 505 result = audit_uid_comparator(cred->euid, f->op, f->uid);
^1da177e4c3f41 Linus Torvalds 2005-04-16 506 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 507 case AUDIT_SUID:
ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 508 result = audit_uid_comparator(cred->suid, f->op, f->uid);
^1da177e4c3f41 Linus Torvalds 2005-04-16 509 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 510 case AUDIT_FSUID:
ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 511 result = audit_uid_comparator(cred->fsuid, f->op, f->uid);
^1da177e4c3f41 Linus Torvalds 2005-04-16 512 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 513 case AUDIT_GID:
ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 514 result = audit_gid_comparator(cred->gid, f->op, f->gid);
37eebe39c9731a Matvejchikov Ilya 2011-12-13 515 if (f->op == Audit_equal) {
37eebe39c9731a Matvejchikov Ilya 2011-12-13 516 if (!result)
af85d1772e31fe Ondrej Mosnáček 2018-06-05 517 result = groups_search(cred->group_info, f->gid);
37eebe39c9731a Matvejchikov Ilya 2011-12-13 518 } else if (f->op == Audit_not_equal) {
37eebe39c9731a Matvejchikov Ilya 2011-12-13 519 if (result)
af85d1772e31fe Ondrej Mosnáček 2018-06-05 520 result = !groups_search(cred->group_info, f->gid);
37eebe39c9731a Matvejchikov Ilya 2011-12-13 521 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 522 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 523 case AUDIT_EGID:
ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 524 result = audit_gid_comparator(cred->egid, f->op, f->gid);
37eebe39c9731a Matvejchikov Ilya 2011-12-13 525 if (f->op == Audit_equal) {
37eebe39c9731a Matvejchikov Ilya 2011-12-13 526 if (!result)
af85d1772e31fe Ondrej Mosnáček 2018-06-05 527 result = groups_search(cred->group_info, f->gid);
37eebe39c9731a Matvejchikov Ilya 2011-12-13 528 } else if (f->op == Audit_not_equal) {
37eebe39c9731a Matvejchikov Ilya 2011-12-13 529 if (result)
af85d1772e31fe Ondrej Mosnáček 2018-06-05 530 result = !groups_search(cred->group_info, f->gid);
37eebe39c9731a Matvejchikov Ilya 2011-12-13 531 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 532 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 533 case AUDIT_SGID:
ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 534 result = audit_gid_comparator(cred->sgid, f->op, f->gid);
^1da177e4c3f41 Linus Torvalds 2005-04-16 535 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 536 case AUDIT_FSGID:
ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 537 result = audit_gid_comparator(cred->fsgid, f->op, f->gid);
^1da177e4c3f41 Linus Torvalds 2005-04-16 538 break;
8fae47705685fc Richard Guy Briggs 2016-11-20 539 case AUDIT_SESSIONID:
5b71388663c092 Ondrej Mosnáček 2018-05-17 540 sessionid = audit_get_sessionid(tsk);
8fae47705685fc Richard Guy Briggs 2016-11-20 541 result = audit_comparator(sessionid, f->op, f->val);
8fae47705685fc Richard Guy Briggs 2016-11-20 542 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 543 case AUDIT_PERS:
93315ed6dd12da Amy Griffis 2006-02-07 544 result = audit_comparator(tsk->personality, f->op, f->val);
^1da177e4c3f41 Linus Torvalds 2005-04-16 545 break;
2fd6f58ba6efc8 David Woodhouse 2005-04-29 546 case AUDIT_ARCH:
2fd6f58ba6efc8 David Woodhouse 2005-04-29 547 if (ctx)
93315ed6dd12da Amy Griffis 2006-02-07 548 result = audit_comparator(ctx->arch, f->op, f->val);
2fd6f58ba6efc8 David Woodhouse 2005-04-29 549 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 550
^1da177e4c3f41 Linus Torvalds 2005-04-16 551 case AUDIT_EXIT:
ba59eae7238572 Alex Shi 2020-11-06 552 if (ctx && ctx->return_valid != AUDITSC_INVALID)
93315ed6dd12da Amy Griffis 2006-02-07 553 result = audit_comparator(ctx->return_code, f->op, f->val);
^1da177e4c3f41 Linus Torvalds 2005-04-16 554 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 555 case AUDIT_SUCCESS:
ba59eae7238572 Alex Shi 2020-11-06 556 if (ctx && ctx->return_valid != AUDITSC_INVALID) {
93315ed6dd12da Amy Griffis 2006-02-07 557 if (f->val)
93315ed6dd12da Amy Griffis 2006-02-07 558 result = audit_comparator(ctx->return_valid, f->op, AUDITSC_SUCCESS);
b01f2cc1c37ac3 David Woodhouse 2005-08-27 559 else
93315ed6dd12da Amy Griffis 2006-02-07 560 result = audit_comparator(ctx->return_valid, f->op, AUDITSC_FAILURE);
b01f2cc1c37ac3 David Woodhouse 2005-08-27 561 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 562 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 563 case AUDIT_DEVMAJOR:
16c174bd95cb07 Eric Paris 2012-01-03 564 if (name) {
16c174bd95cb07 Eric Paris 2012-01-03 565 if (audit_comparator(MAJOR(name->dev), f->op, f->val) ||
16c174bd95cb07 Eric Paris 2012-01-03 566 audit_comparator(MAJOR(name->rdev), f->op, f->val))
16c174bd95cb07 Eric Paris 2012-01-03 567 ++result;
16c174bd95cb07 Eric Paris 2012-01-03 568 } else if (ctx) {
5195d8e217a786 Eric Paris 2012-01-03 569 list_for_each_entry(n, &ctx->names_list, list) {
16c174bd95cb07 Eric Paris 2012-01-03 570 if (audit_comparator(MAJOR(n->dev), f->op, f->val) ||
16c174bd95cb07 Eric Paris 2012-01-03 571 audit_comparator(MAJOR(n->rdev), f->op, f->val)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 572 ++result;
^1da177e4c3f41 Linus Torvalds 2005-04-16 573 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 574 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 575 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 576 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 577 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 578 case AUDIT_DEVMINOR:
16c174bd95cb07 Eric Paris 2012-01-03 579 if (name) {
16c174bd95cb07 Eric Paris 2012-01-03 580 if (audit_comparator(MINOR(name->dev), f->op, f->val) ||
16c174bd95cb07 Eric Paris 2012-01-03 581 audit_comparator(MINOR(name->rdev), f->op, f->val))
16c174bd95cb07 Eric Paris 2012-01-03 582 ++result;
16c174bd95cb07 Eric Paris 2012-01-03 583 } else if (ctx) {
5195d8e217a786 Eric Paris 2012-01-03 584 list_for_each_entry(n, &ctx->names_list, list) {
16c174bd95cb07 Eric Paris 2012-01-03 585 if (audit_comparator(MINOR(n->dev), f->op, f->val) ||
16c174bd95cb07 Eric Paris 2012-01-03 586 audit_comparator(MINOR(n->rdev), f->op, f->val)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 587 ++result;
^1da177e4c3f41 Linus Torvalds 2005-04-16 588 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 589 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 590 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 591 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 592 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 593 case AUDIT_INODE:
f368c07d7214a7 Amy Griffis 2006-04-07 594 if (name)
db510fc5cd9b9d Richard Guy Briggs 2013-07-04 595 result = audit_comparator(name->ino, f->op, f->val);
f368c07d7214a7 Amy Griffis 2006-04-07 596 else if (ctx) {
5195d8e217a786 Eric Paris 2012-01-03 597 list_for_each_entry(n, &ctx->names_list, list) {
5195d8e217a786 Eric Paris 2012-01-03 598 if (audit_comparator(n->ino, f->op, f->val)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 599 ++result;
^1da177e4c3f41 Linus Torvalds 2005-04-16 600 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 601 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 602 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 603 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 604 break;
efaffd6e441786 Eric Paris 2012-01-03 605 case AUDIT_OBJ_UID:
efaffd6e441786 Eric Paris 2012-01-03 606 if (name) {
ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 607 result = audit_uid_comparator(name->uid, f->op, f->uid);
efaffd6e441786 Eric Paris 2012-01-03 608 } else if (ctx) {
efaffd6e441786 Eric Paris 2012-01-03 609 list_for_each_entry(n, &ctx->names_list, list) {
ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 610 if (audit_uid_comparator(n->uid, f->op, f->uid)) {
efaffd6e441786 Eric Paris 2012-01-03 611 ++result;
efaffd6e441786 Eric Paris 2012-01-03 612 break;
efaffd6e441786 Eric Paris 2012-01-03 613 }
efaffd6e441786 Eric Paris 2012-01-03 614 }
efaffd6e441786 Eric Paris 2012-01-03 615 }
efaffd6e441786 Eric Paris 2012-01-03 616 break;
54d3218b31aee5 Eric Paris 2012-01-03 617 case AUDIT_OBJ_GID:
54d3218b31aee5 Eric Paris 2012-01-03 618 if (name) {
ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 619 result = audit_gid_comparator(name->gid, f->op, f->gid);
54d3218b31aee5 Eric Paris 2012-01-03 620 } else if (ctx) {
54d3218b31aee5 Eric Paris 2012-01-03 621 list_for_each_entry(n, &ctx->names_list, list) {
ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 622 if (audit_gid_comparator(n->gid, f->op, f->gid)) {
54d3218b31aee5 Eric Paris 2012-01-03 623 ++result;
54d3218b31aee5 Eric Paris 2012-01-03 624 break;
54d3218b31aee5 Eric Paris 2012-01-03 625 }
54d3218b31aee5 Eric Paris 2012-01-03 626 }
54d3218b31aee5 Eric Paris 2012-01-03 627 }
54d3218b31aee5 Eric Paris 2012-01-03 628 break;
f368c07d7214a7 Amy Griffis 2006-04-07 629 case AUDIT_WATCH:
0223fad3c98a95 Richard Guy Briggs 2019-05-22 630 if (name) {
0223fad3c98a95 Richard Guy Briggs 2019-05-22 631 result = audit_watch_compare(rule->watch,
0223fad3c98a95 Richard Guy Briggs 2019-05-22 632 name->ino,
0223fad3c98a95 Richard Guy Briggs 2019-05-22 633 name->dev);
0223fad3c98a95 Richard Guy Briggs 2019-05-22 634 if (f->op == Audit_not_equal)
0223fad3c98a95 Richard Guy Briggs 2019-05-22 635 result = !result;
0223fad3c98a95 Richard Guy Briggs 2019-05-22 636 }
f368c07d7214a7 Amy Griffis 2006-04-07 637 break;
74c3cbe33bc077 Al Viro 2007-07-22 638 case AUDIT_DIR:
0223fad3c98a95 Richard Guy Briggs 2019-05-22 639 if (ctx) {
74c3cbe33bc077 Al Viro 2007-07-22 640 result = match_tree_refs(ctx, rule->tree);
0223fad3c98a95 Richard Guy Briggs 2019-05-22 641 if (f->op == Audit_not_equal)
0223fad3c98a95 Richard Guy Briggs 2019-05-22 642 result = !result;
0223fad3c98a95 Richard Guy Briggs 2019-05-22 643 }
74c3cbe33bc077 Al Viro 2007-07-22 644 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 645 case AUDIT_LOGINUID:
38f80590486e38 Richard Guy Briggs 2018-05-16 646 result = audit_uid_comparator(audit_get_loginuid(tsk),
38f80590486e38 Richard Guy Briggs 2018-05-16 647 f->op, f->uid);
^1da177e4c3f41 Linus Torvalds 2005-04-16 648 break;
780a7654cee8d6 Eric W. Biederman 2013-04-09 649 case AUDIT_LOGINUID_SET:
780a7654cee8d6 Eric W. Biederman 2013-04-09 650 result = audit_comparator(audit_loginuid_set(tsk), f->op, f->val);
780a7654cee8d6 Eric W. Biederman 2013-04-09 651 break;
bf361231c295d9 Richard Guy Briggs 2019-05-09 652 case AUDIT_SADDR_FAM:
bf361231c295d9 Richard Guy Briggs 2019-05-09 @653 if (ctx->sockaddr)
^^^^^^^^^^^^^
Everywhere else checks if "ctx" is NULL before dereferencing it.

bf361231c295d9 Richard Guy Briggs 2019-05-09 654 result = audit_comparator(ctx->sockaddr->ss_family,
bf361231c295d9 Richard Guy Briggs 2019-05-09 655 f->op, f->val);
bf361231c295d9 Richard Guy Briggs 2019-05-09 656 break;
3a6b9f85c641a3 Darrel Goeddel 2006-06-29 657 case AUDIT_SUBJ_USER:
3a6b9f85c641a3 Darrel Goeddel 2006-06-29 658 case AUDIT_SUBJ_ROLE:
3a6b9f85c641a3 Darrel Goeddel 2006-06-29 659 case AUDIT_SUBJ_TYPE:
3a6b9f85c641a3 Darrel Goeddel 2006-06-29 660 case AUDIT_SUBJ_SEN:
3a6b9f85c641a3 Darrel Goeddel 2006-06-29 661 case AUDIT_SUBJ_CLR:
3dc7e3153eddfc Darrel Goeddel 2006-03-10 662 /* NOTE: this may return negative values indicating
3dc7e3153eddfc Darrel Goeddel 2006-03-10 663 a temporary error. We simply treat this as a
3dc7e3153eddfc Darrel Goeddel 2006-03-10 664 match for now to avoid losing information that
3dc7e3153eddfc Darrel Goeddel 2006-03-10 665 may be wanted. An error message will also be
3dc7e3153eddfc Darrel Goeddel 2006-03-10 666 logged upon error */
04305e4aff8b05 Ahmed S. Darwish 2008-04-19 667 if (f->lsm_rule) {
2ad312d2093ae5 Steve Grubb 2006-04-11 668 if (need_sid) {
4ebd7651bfc899 Paul Moore 2021-02-19 669 security_task_getsecid_subj(tsk, &sid);
2ad312d2093ae5 Steve Grubb 2006-04-11 670 need_sid = 0;
2ad312d2093ae5 Steve Grubb 2006-04-11 671 }
d7a96f3a1ae279 Ahmed S. Darwish 2008-03-01 672 result = security_audit_rule_match(sid, f->type,
3dc7e3153eddfc Darrel Goeddel 2006-03-10 673 f->op,
90462a5bd30c6e Richard Guy Briggs 2019-01-31 674 f->lsm_rule);
2ad312d2093ae5 Steve Grubb 2006-04-11 675 }
3dc7e3153eddfc Darrel Goeddel 2006-03-10 676 break;
6e5a2d1d325968 Darrel Goeddel 2006-06-29 677 case AUDIT_OBJ_USER:
6e5a2d1d325968 Darrel Goeddel 2006-06-29 678 case AUDIT_OBJ_ROLE:
6e5a2d1d325968 Darrel Goeddel 2006-06-29 679 case AUDIT_OBJ_TYPE:
6e5a2d1d325968 Darrel Goeddel 2006-06-29 680 case AUDIT_OBJ_LEV_LOW:
6e5a2d1d325968 Darrel Goeddel 2006-06-29 681 case AUDIT_OBJ_LEV_HIGH:
6e5a2d1d325968 Darrel Goeddel 2006-06-29 682 /* The above note for AUDIT_SUBJ_USER...AUDIT_SUBJ_CLR
6e5a2d1d325968 Darrel Goeddel 2006-06-29 683 also applies here */
04305e4aff8b05 Ahmed S. Darwish 2008-04-19 684 if (f->lsm_rule) {
6e5a2d1d325968 Darrel Goeddel 2006-06-29 685 /* Find files that match */
6e5a2d1d325968 Darrel Goeddel 2006-06-29 686 if (name) {
d7a96f3a1ae279 Ahmed S. Darwish 2008-03-01 687 result = security_audit_rule_match(
90462a5bd30c6e Richard Guy Briggs 2019-01-31 688 name->osid,
90462a5bd30c6e Richard Guy Briggs 2019-01-31 689 f->type,
90462a5bd30c6e Richard Guy Briggs 2019-01-31 690 f->op,
90462a5bd30c6e Richard Guy Briggs 2019-01-31 691 f->lsm_rule);
6e5a2d1d325968 Darrel Goeddel 2006-06-29 692 } else if (ctx) {
5195d8e217a786 Eric Paris 2012-01-03 693 list_for_each_entry(n, &ctx->names_list, list) {
90462a5bd30c6e Richard Guy Briggs 2019-01-31 694 if (security_audit_rule_match(
90462a5bd30c6e Richard Guy Briggs 2019-01-31 695 n->osid,
90462a5bd30c6e Richard Guy Briggs 2019-01-31 696 f->type,
90462a5bd30c6e Richard Guy Briggs 2019-01-31 697 f->op,
90462a5bd30c6e Richard Guy Briggs 2019-01-31 698 f->lsm_rule)) {
6e5a2d1d325968 Darrel Goeddel 2006-06-29 699 ++result;
6e5a2d1d325968 Darrel Goeddel 2006-06-29 700 break;
6e5a2d1d325968 Darrel Goeddel 2006-06-29 701 }
6e5a2d1d325968 Darrel Goeddel 2006-06-29 702 }
6e5a2d1d325968 Darrel Goeddel 2006-06-29 703 }
6e5a2d1d325968 Darrel Goeddel 2006-06-29 704 /* Find ipc objects that match */
a33e6751003c5a Al Viro 2008-12-10 705 if (!ctx || ctx->type != AUDIT_IPC)
6e5a2d1d325968 Darrel Goeddel 2006-06-29 706 break;
a33e6751003c5a Al Viro 2008-12-10 707 if (security_audit_rule_match(ctx->ipc.osid,
a33e6751003c5a Al Viro 2008-12-10 708 f->type, f->op,
90462a5bd30c6e Richard Guy Briggs 2019-01-31 709 f->lsm_rule))
a33e6751003c5a Al Viro 2008-12-10 710 ++result;
6e5a2d1d325968 Darrel Goeddel 2006-06-29 711 }
6e5a2d1d325968 Darrel Goeddel 2006-06-29 712 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 713 case AUDIT_ARG0:
^1da177e4c3f41 Linus Torvalds 2005-04-16 714 case AUDIT_ARG1:
^1da177e4c3f41 Linus Torvalds 2005-04-16 715 case AUDIT_ARG2:
^1da177e4c3f41 Linus Torvalds 2005-04-16 716 case AUDIT_ARG3:
^1da177e4c3f41 Linus Torvalds 2005-04-16 717 if (ctx)
93315ed6dd12da Amy Griffis 2006-02-07 718 result = audit_comparator(ctx->argv[f->type-AUDIT_ARG0], f->op, f->val);
^1da177e4c3f41 Linus Torvalds 2005-04-16 719 break;
5adc8a6adc91c4 Amy Griffis 2006-06-14 720 case AUDIT_FILTERKEY:
5adc8a6adc91c4 Amy Griffis 2006-06-14 721 /* ignore this field for filtering */
5adc8a6adc91c4 Amy Griffis 2006-06-14 722 result = 1;
5adc8a6adc91c4 Amy Griffis 2006-06-14 723 break;
55669bfa141b48 Al Viro 2006-08-31 724 case AUDIT_PERM:
55669bfa141b48 Al Viro 2006-08-31 725 result = audit_match_perm(ctx, f->val);
0223fad3c98a95 Richard Guy Briggs 2019-05-22 726 if (f->op == Audit_not_equal)
0223fad3c98a95 Richard Guy Briggs 2019-05-22 727 result = !result;
55669bfa141b48 Al Viro 2006-08-31 728 break;
8b67dca9420474 Al Viro 2008-04-28 729 case AUDIT_FILETYPE:
8b67dca9420474 Al Viro 2008-04-28 730 result = audit_match_filetype(ctx, f->val);
0223fad3c98a95 Richard Guy Briggs 2019-05-22 731 if (f->op == Audit_not_equal)
0223fad3c98a95 Richard Guy Briggs 2019-05-22 732 result = !result;
8b67dca9420474 Al Viro 2008-04-28 733 break;
02d86a568c6d2d Eric Paris 2012-01-03 734 case AUDIT_FIELD_COMPARE:
02d86a568c6d2d Eric Paris 2012-01-03 735 result = audit_field_compare(tsk, cred, f, ctx, name);
02d86a568c6d2d Eric Paris 2012-01-03 736 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 737 }
f562988350361b Tony Jones 2011-04-27 738 if (!result)
^1da177e4c3f41 Linus Torvalds 2005-04-16 739 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 740 }
0590b9335a1c72 Al Viro 2008-12-14 741
0590b9335a1c72 Al Viro 2008-12-14 742 if (ctx) {
0590b9335a1c72 Al Viro 2008-12-14 743 if (rule->filterkey) {
0590b9335a1c72 Al Viro 2008-12-14 744 kfree(ctx->filterkey);
5adc8a6adc91c4 Amy Griffis 2006-06-14 745 ctx->filterkey = kstrdup(rule->filterkey, GFP_ATOMIC);
0590b9335a1c72 Al Viro 2008-12-14 746 }
0590b9335a1c72 Al Viro 2008-12-14 747 ctx->prio = rule->prio;
0590b9335a1c72 Al Viro 2008-12-14 748 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 749 switch (rule->action) {
66b12abc846d31 Paul Moore 2016-06-16 750 case AUDIT_NEVER:
619ed58ac4e2fb Sergey Nazarov 2021-06-08 751 *state = AUDIT_STATE_DISABLED;
66b12abc846d31 Paul Moore 2016-06-16 752 break;
66b12abc846d31 Paul Moore 2016-06-16 753 case AUDIT_ALWAYS:
619ed58ac4e2fb Sergey Nazarov 2021-06-08 754 *state = AUDIT_STATE_RECORD;
66b12abc846d31 Paul Moore 2016-06-16 755 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 756 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 757 return 1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 758 }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

2021-10-13 09:46:29

by Gaosheng Cui

[permalink] [raw]
Subject: Re: [PATCH -next] audit: return early if the rule has a lower priority

I have resubmitted a patch to fix the issue, thanks for your advice.

https://patchwork.kernel.org/project/linux-audit/list/?series=562507
<https://patchwork.kernel.org/project/linux-audit/list/?series=562507>

Cheers,

在 2021/10/13 15:16, Dan Carpenter 写道:
> [ It's Gaosheng's patch which triggers the warning but I think it's
> actually the dereference which should be changed. I've added Richard
> to the CC list. -dan ]
>
> Hi Gaosheng,
>
> url: https://github.com/0day-ci/linux/commits/Gaosheng-Cui/audit-return-early-if-the-rule-has-a-lower-priority/20211012-093102
> base: d3134eb5de8546a214c028fb7195e764b89da7d4
> config: x86_64-randconfig-m001-20211012 (attached as .config)
> compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <[email protected]>
> Reported-by: Dan Carpenter <[email protected]>
>
> smatch warnings:
> kernel/auditsc.c:653 audit_filter_rules() error: we previously assumed 'ctx' could be null (see line 473)
>
> vim +/ctx +653 kernel/auditsc.c
>
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 461 static int audit_filter_rules(struct task_struct *tsk,
> 93315ed6dd12da Amy Griffis 2006-02-07 462 struct audit_krule *rule,
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 463 struct audit_context *ctx,
> f368c07d7214a7 Amy Griffis 2006-04-07 464 struct audit_names *name,
> f562988350361b Tony Jones 2011-04-27 465 enum audit_state *state,
> f562988350361b Tony Jones 2011-04-27 466 bool task_creation)
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 467 {
> f562988350361b Tony Jones 2011-04-27 468 const struct cred *cred;
> 5195d8e217a786 Eric Paris 2012-01-03 469 int i, need_sid = 1;
> 3dc7e3153eddfc Darrel Goeddel 2006-03-10 470 u32 sid;
> 8fae47705685fc Richard Guy Briggs 2016-11-20 471 unsigned int sessionid;
> 3dc7e3153eddfc Darrel Goeddel 2006-03-10 472
> 046a8e46eefb9d Gaosheng Cui 2021-10-12 @473 if (ctx && rule->prio <= ctx->prio)
> ^^^
> Checked here.
>
> 046a8e46eefb9d Gaosheng Cui 2021-10-12 474 return 0;
> 046a8e46eefb9d Gaosheng Cui 2021-10-12 475
> f562988350361b Tony Jones 2011-04-27 476 cred = rcu_dereference_check(tsk->cred, tsk == current || task_creation);
> f562988350361b Tony Jones 2011-04-27 477
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 478 for (i = 0; i < rule->field_count; i++) {
> 93315ed6dd12da Amy Griffis 2006-02-07 479 struct audit_field *f = &rule->fields[i];
> 5195d8e217a786 Eric Paris 2012-01-03 480 struct audit_names *n;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 481 int result = 0;
> f1dc4867ff41b7 Richard Guy Briggs 2013-12-11 482 pid_t pid;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 483
> 93315ed6dd12da Amy Griffis 2006-02-07 484 switch (f->type) {
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 485 case AUDIT_PID:
> fa2bea2f5cca5b Paul Moore 2016-08-30 486 pid = task_tgid_nr(tsk);
> f1dc4867ff41b7 Richard Guy Briggs 2013-12-11 487 result = audit_comparator(pid, f->op, f->val);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 488 break;
> 3c66251e573219 Al Viro 2006-05-06 489 case AUDIT_PPID:
> 419c58f11fb732 Alexander Viro 2006-09-29 490 if (ctx) {
> 419c58f11fb732 Alexander Viro 2006-09-29 491 if (!ctx->ppid)
> c92cdeb45eea38 Richard Guy Briggs 2013-12-10 492 ctx->ppid = task_ppid_nr(tsk);
> 3c66251e573219 Al Viro 2006-05-06 493 result = audit_comparator(ctx->ppid, f->op, f->val);
> 419c58f11fb732 Alexander Viro 2006-09-29 494 }
> 3c66251e573219 Al Viro 2006-05-06 495 break;
> 34d99af52ad40b Richard Guy Briggs 2015-08-05 496 case AUDIT_EXE:
> 34d99af52ad40b Richard Guy Briggs 2015-08-05 497 result = audit_exe_compare(tsk, rule->exe);
> 23bcc480dac204 Ondrej Mosnáček 2018-04-09 498 if (f->op == Audit_not_equal)
> 23bcc480dac204 Ondrej Mosnáček 2018-04-09 499 result = !result;
> 34d99af52ad40b Richard Guy Briggs 2015-08-05 500 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 501 case AUDIT_UID:
> ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 502 result = audit_uid_comparator(cred->uid, f->op, f->uid);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 503 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 504 case AUDIT_EUID:
> ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 505 result = audit_uid_comparator(cred->euid, f->op, f->uid);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 506 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 507 case AUDIT_SUID:
> ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 508 result = audit_uid_comparator(cred->suid, f->op, f->uid);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 509 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 510 case AUDIT_FSUID:
> ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 511 result = audit_uid_comparator(cred->fsuid, f->op, f->uid);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 512 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 513 case AUDIT_GID:
> ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 514 result = audit_gid_comparator(cred->gid, f->op, f->gid);
> 37eebe39c9731a Matvejchikov Ilya 2011-12-13 515 if (f->op == Audit_equal) {
> 37eebe39c9731a Matvejchikov Ilya 2011-12-13 516 if (!result)
> af85d1772e31fe Ondrej Mosnáček 2018-06-05 517 result = groups_search(cred->group_info, f->gid);
> 37eebe39c9731a Matvejchikov Ilya 2011-12-13 518 } else if (f->op == Audit_not_equal) {
> 37eebe39c9731a Matvejchikov Ilya 2011-12-13 519 if (result)
> af85d1772e31fe Ondrej Mosnáček 2018-06-05 520 result = !groups_search(cred->group_info, f->gid);
> 37eebe39c9731a Matvejchikov Ilya 2011-12-13 521 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 522 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 523 case AUDIT_EGID:
> ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 524 result = audit_gid_comparator(cred->egid, f->op, f->gid);
> 37eebe39c9731a Matvejchikov Ilya 2011-12-13 525 if (f->op == Audit_equal) {
> 37eebe39c9731a Matvejchikov Ilya 2011-12-13 526 if (!result)
> af85d1772e31fe Ondrej Mosnáček 2018-06-05 527 result = groups_search(cred->group_info, f->gid);
> 37eebe39c9731a Matvejchikov Ilya 2011-12-13 528 } else if (f->op == Audit_not_equal) {
> 37eebe39c9731a Matvejchikov Ilya 2011-12-13 529 if (result)
> af85d1772e31fe Ondrej Mosnáček 2018-06-05 530 result = !groups_search(cred->group_info, f->gid);
> 37eebe39c9731a Matvejchikov Ilya 2011-12-13 531 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 532 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 533 case AUDIT_SGID:
> ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 534 result = audit_gid_comparator(cred->sgid, f->op, f->gid);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 535 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 536 case AUDIT_FSGID:
> ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 537 result = audit_gid_comparator(cred->fsgid, f->op, f->gid);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 538 break;
> 8fae47705685fc Richard Guy Briggs 2016-11-20 539 case AUDIT_SESSIONID:
> 5b71388663c092 Ondrej Mosnáček 2018-05-17 540 sessionid = audit_get_sessionid(tsk);
> 8fae47705685fc Richard Guy Briggs 2016-11-20 541 result = audit_comparator(sessionid, f->op, f->val);
> 8fae47705685fc Richard Guy Briggs 2016-11-20 542 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 543 case AUDIT_PERS:
> 93315ed6dd12da Amy Griffis 2006-02-07 544 result = audit_comparator(tsk->personality, f->op, f->val);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 545 break;
> 2fd6f58ba6efc8 David Woodhouse 2005-04-29 546 case AUDIT_ARCH:
> 2fd6f58ba6efc8 David Woodhouse 2005-04-29 547 if (ctx)
> 93315ed6dd12da Amy Griffis 2006-02-07 548 result = audit_comparator(ctx->arch, f->op, f->val);
> 2fd6f58ba6efc8 David Woodhouse 2005-04-29 549 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 550
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 551 case AUDIT_EXIT:
> ba59eae7238572 Alex Shi 2020-11-06 552 if (ctx && ctx->return_valid != AUDITSC_INVALID)
> 93315ed6dd12da Amy Griffis 2006-02-07 553 result = audit_comparator(ctx->return_code, f->op, f->val);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 554 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 555 case AUDIT_SUCCESS:
> ba59eae7238572 Alex Shi 2020-11-06 556 if (ctx && ctx->return_valid != AUDITSC_INVALID) {
> 93315ed6dd12da Amy Griffis 2006-02-07 557 if (f->val)
> 93315ed6dd12da Amy Griffis 2006-02-07 558 result = audit_comparator(ctx->return_valid, f->op, AUDITSC_SUCCESS);
> b01f2cc1c37ac3 David Woodhouse 2005-08-27 559 else
> 93315ed6dd12da Amy Griffis 2006-02-07 560 result = audit_comparator(ctx->return_valid, f->op, AUDITSC_FAILURE);
> b01f2cc1c37ac3 David Woodhouse 2005-08-27 561 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 562 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 563 case AUDIT_DEVMAJOR:
> 16c174bd95cb07 Eric Paris 2012-01-03 564 if (name) {
> 16c174bd95cb07 Eric Paris 2012-01-03 565 if (audit_comparator(MAJOR(name->dev), f->op, f->val) ||
> 16c174bd95cb07 Eric Paris 2012-01-03 566 audit_comparator(MAJOR(name->rdev), f->op, f->val))
> 16c174bd95cb07 Eric Paris 2012-01-03 567 ++result;
> 16c174bd95cb07 Eric Paris 2012-01-03 568 } else if (ctx) {
> 5195d8e217a786 Eric Paris 2012-01-03 569 list_for_each_entry(n, &ctx->names_list, list) {
> 16c174bd95cb07 Eric Paris 2012-01-03 570 if (audit_comparator(MAJOR(n->dev), f->op, f->val) ||
> 16c174bd95cb07 Eric Paris 2012-01-03 571 audit_comparator(MAJOR(n->rdev), f->op, f->val)) {
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 572 ++result;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 573 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 574 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 575 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 576 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 577 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 578 case AUDIT_DEVMINOR:
> 16c174bd95cb07 Eric Paris 2012-01-03 579 if (name) {
> 16c174bd95cb07 Eric Paris 2012-01-03 580 if (audit_comparator(MINOR(name->dev), f->op, f->val) ||
> 16c174bd95cb07 Eric Paris 2012-01-03 581 audit_comparator(MINOR(name->rdev), f->op, f->val))
> 16c174bd95cb07 Eric Paris 2012-01-03 582 ++result;
> 16c174bd95cb07 Eric Paris 2012-01-03 583 } else if (ctx) {
> 5195d8e217a786 Eric Paris 2012-01-03 584 list_for_each_entry(n, &ctx->names_list, list) {
> 16c174bd95cb07 Eric Paris 2012-01-03 585 if (audit_comparator(MINOR(n->dev), f->op, f->val) ||
> 16c174bd95cb07 Eric Paris 2012-01-03 586 audit_comparator(MINOR(n->rdev), f->op, f->val)) {
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 587 ++result;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 588 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 589 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 590 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 591 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 592 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 593 case AUDIT_INODE:
> f368c07d7214a7 Amy Griffis 2006-04-07 594 if (name)
> db510fc5cd9b9d Richard Guy Briggs 2013-07-04 595 result = audit_comparator(name->ino, f->op, f->val);
> f368c07d7214a7 Amy Griffis 2006-04-07 596 else if (ctx) {
> 5195d8e217a786 Eric Paris 2012-01-03 597 list_for_each_entry(n, &ctx->names_list, list) {
> 5195d8e217a786 Eric Paris 2012-01-03 598 if (audit_comparator(n->ino, f->op, f->val)) {
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 599 ++result;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 600 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 601 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 602 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 603 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 604 break;
> efaffd6e441786 Eric Paris 2012-01-03 605 case AUDIT_OBJ_UID:
> efaffd6e441786 Eric Paris 2012-01-03 606 if (name) {
> ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 607 result = audit_uid_comparator(name->uid, f->op, f->uid);
> efaffd6e441786 Eric Paris 2012-01-03 608 } else if (ctx) {
> efaffd6e441786 Eric Paris 2012-01-03 609 list_for_each_entry(n, &ctx->names_list, list) {
> ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 610 if (audit_uid_comparator(n->uid, f->op, f->uid)) {
> efaffd6e441786 Eric Paris 2012-01-03 611 ++result;
> efaffd6e441786 Eric Paris 2012-01-03 612 break;
> efaffd6e441786 Eric Paris 2012-01-03 613 }
> efaffd6e441786 Eric Paris 2012-01-03 614 }
> efaffd6e441786 Eric Paris 2012-01-03 615 }
> efaffd6e441786 Eric Paris 2012-01-03 616 break;
> 54d3218b31aee5 Eric Paris 2012-01-03 617 case AUDIT_OBJ_GID:
> 54d3218b31aee5 Eric Paris 2012-01-03 618 if (name) {
> ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 619 result = audit_gid_comparator(name->gid, f->op, f->gid);
> 54d3218b31aee5 Eric Paris 2012-01-03 620 } else if (ctx) {
> 54d3218b31aee5 Eric Paris 2012-01-03 621 list_for_each_entry(n, &ctx->names_list, list) {
> ca57ec0f00c3f1 Eric W. Biederman 2012-09-11 622 if (audit_gid_comparator(n->gid, f->op, f->gid)) {
> 54d3218b31aee5 Eric Paris 2012-01-03 623 ++result;
> 54d3218b31aee5 Eric Paris 2012-01-03 624 break;
> 54d3218b31aee5 Eric Paris 2012-01-03 625 }
> 54d3218b31aee5 Eric Paris 2012-01-03 626 }
> 54d3218b31aee5 Eric Paris 2012-01-03 627 }
> 54d3218b31aee5 Eric Paris 2012-01-03 628 break;
> f368c07d7214a7 Amy Griffis 2006-04-07 629 case AUDIT_WATCH:
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 630 if (name) {
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 631 result = audit_watch_compare(rule->watch,
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 632 name->ino,
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 633 name->dev);
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 634 if (f->op == Audit_not_equal)
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 635 result = !result;
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 636 }
> f368c07d7214a7 Amy Griffis 2006-04-07 637 break;
> 74c3cbe33bc077 Al Viro 2007-07-22 638 case AUDIT_DIR:
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 639 if (ctx) {
> 74c3cbe33bc077 Al Viro 2007-07-22 640 result = match_tree_refs(ctx, rule->tree);
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 641 if (f->op == Audit_not_equal)
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 642 result = !result;
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 643 }
> 74c3cbe33bc077 Al Viro 2007-07-22 644 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 645 case AUDIT_LOGINUID:
> 38f80590486e38 Richard Guy Briggs 2018-05-16 646 result = audit_uid_comparator(audit_get_loginuid(tsk),
> 38f80590486e38 Richard Guy Briggs 2018-05-16 647 f->op, f->uid);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 648 break;
> 780a7654cee8d6 Eric W. Biederman 2013-04-09 649 case AUDIT_LOGINUID_SET:
> 780a7654cee8d6 Eric W. Biederman 2013-04-09 650 result = audit_comparator(audit_loginuid_set(tsk), f->op, f->val);
> 780a7654cee8d6 Eric W. Biederman 2013-04-09 651 break;
> bf361231c295d9 Richard Guy Briggs 2019-05-09 652 case AUDIT_SADDR_FAM:
> bf361231c295d9 Richard Guy Briggs 2019-05-09 @653 if (ctx->sockaddr)
> ^^^^^^^^^^^^^
> Everywhere else checks if "ctx" is NULL before dereferencing it.
>
> bf361231c295d9 Richard Guy Briggs 2019-05-09 654 result = audit_comparator(ctx->sockaddr->ss_family,
> bf361231c295d9 Richard Guy Briggs 2019-05-09 655 f->op, f->val);
> bf361231c295d9 Richard Guy Briggs 2019-05-09 656 break;
> 3a6b9f85c641a3 Darrel Goeddel 2006-06-29 657 case AUDIT_SUBJ_USER:
> 3a6b9f85c641a3 Darrel Goeddel 2006-06-29 658 case AUDIT_SUBJ_ROLE:
> 3a6b9f85c641a3 Darrel Goeddel 2006-06-29 659 case AUDIT_SUBJ_TYPE:
> 3a6b9f85c641a3 Darrel Goeddel 2006-06-29 660 case AUDIT_SUBJ_SEN:
> 3a6b9f85c641a3 Darrel Goeddel 2006-06-29 661 case AUDIT_SUBJ_CLR:
> 3dc7e3153eddfc Darrel Goeddel 2006-03-10 662 /* NOTE: this may return negative values indicating
> 3dc7e3153eddfc Darrel Goeddel 2006-03-10 663 a temporary error. We simply treat this as a
> 3dc7e3153eddfc Darrel Goeddel 2006-03-10 664 match for now to avoid losing information that
> 3dc7e3153eddfc Darrel Goeddel 2006-03-10 665 may be wanted. An error message will also be
> 3dc7e3153eddfc Darrel Goeddel 2006-03-10 666 logged upon error */
> 04305e4aff8b05 Ahmed S. Darwish 2008-04-19 667 if (f->lsm_rule) {
> 2ad312d2093ae5 Steve Grubb 2006-04-11 668 if (need_sid) {
> 4ebd7651bfc899 Paul Moore 2021-02-19 669 security_task_getsecid_subj(tsk, &sid);
> 2ad312d2093ae5 Steve Grubb 2006-04-11 670 need_sid = 0;
> 2ad312d2093ae5 Steve Grubb 2006-04-11 671 }
> d7a96f3a1ae279 Ahmed S. Darwish 2008-03-01 672 result = security_audit_rule_match(sid, f->type,
> 3dc7e3153eddfc Darrel Goeddel 2006-03-10 673 f->op,
> 90462a5bd30c6e Richard Guy Briggs 2019-01-31 674 f->lsm_rule);
> 2ad312d2093ae5 Steve Grubb 2006-04-11 675 }
> 3dc7e3153eddfc Darrel Goeddel 2006-03-10 676 break;
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 677 case AUDIT_OBJ_USER:
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 678 case AUDIT_OBJ_ROLE:
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 679 case AUDIT_OBJ_TYPE:
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 680 case AUDIT_OBJ_LEV_LOW:
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 681 case AUDIT_OBJ_LEV_HIGH:
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 682 /* The above note for AUDIT_SUBJ_USER...AUDIT_SUBJ_CLR
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 683 also applies here */
> 04305e4aff8b05 Ahmed S. Darwish 2008-04-19 684 if (f->lsm_rule) {
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 685 /* Find files that match */
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 686 if (name) {
> d7a96f3a1ae279 Ahmed S. Darwish 2008-03-01 687 result = security_audit_rule_match(
> 90462a5bd30c6e Richard Guy Briggs 2019-01-31 688 name->osid,
> 90462a5bd30c6e Richard Guy Briggs 2019-01-31 689 f->type,
> 90462a5bd30c6e Richard Guy Briggs 2019-01-31 690 f->op,
> 90462a5bd30c6e Richard Guy Briggs 2019-01-31 691 f->lsm_rule);
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 692 } else if (ctx) {
> 5195d8e217a786 Eric Paris 2012-01-03 693 list_for_each_entry(n, &ctx->names_list, list) {
> 90462a5bd30c6e Richard Guy Briggs 2019-01-31 694 if (security_audit_rule_match(
> 90462a5bd30c6e Richard Guy Briggs 2019-01-31 695 n->osid,
> 90462a5bd30c6e Richard Guy Briggs 2019-01-31 696 f->type,
> 90462a5bd30c6e Richard Guy Briggs 2019-01-31 697 f->op,
> 90462a5bd30c6e Richard Guy Briggs 2019-01-31 698 f->lsm_rule)) {
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 699 ++result;
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 700 break;
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 701 }
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 702 }
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 703 }
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 704 /* Find ipc objects that match */
> a33e6751003c5a Al Viro 2008-12-10 705 if (!ctx || ctx->type != AUDIT_IPC)
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 706 break;
> a33e6751003c5a Al Viro 2008-12-10 707 if (security_audit_rule_match(ctx->ipc.osid,
> a33e6751003c5a Al Viro 2008-12-10 708 f->type, f->op,
> 90462a5bd30c6e Richard Guy Briggs 2019-01-31 709 f->lsm_rule))
> a33e6751003c5a Al Viro 2008-12-10 710 ++result;
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 711 }
> 6e5a2d1d325968 Darrel Goeddel 2006-06-29 712 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 713 case AUDIT_ARG0:
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 714 case AUDIT_ARG1:
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 715 case AUDIT_ARG2:
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 716 case AUDIT_ARG3:
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 717 if (ctx)
> 93315ed6dd12da Amy Griffis 2006-02-07 718 result = audit_comparator(ctx->argv[f->type-AUDIT_ARG0], f->op, f->val);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 719 break;
> 5adc8a6adc91c4 Amy Griffis 2006-06-14 720 case AUDIT_FILTERKEY:
> 5adc8a6adc91c4 Amy Griffis 2006-06-14 721 /* ignore this field for filtering */
> 5adc8a6adc91c4 Amy Griffis 2006-06-14 722 result = 1;
> 5adc8a6adc91c4 Amy Griffis 2006-06-14 723 break;
> 55669bfa141b48 Al Viro 2006-08-31 724 case AUDIT_PERM:
> 55669bfa141b48 Al Viro 2006-08-31 725 result = audit_match_perm(ctx, f->val);
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 726 if (f->op == Audit_not_equal)
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 727 result = !result;
> 55669bfa141b48 Al Viro 2006-08-31 728 break;
> 8b67dca9420474 Al Viro 2008-04-28 729 case AUDIT_FILETYPE:
> 8b67dca9420474 Al Viro 2008-04-28 730 result = audit_match_filetype(ctx, f->val);
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 731 if (f->op == Audit_not_equal)
> 0223fad3c98a95 Richard Guy Briggs 2019-05-22 732 result = !result;
> 8b67dca9420474 Al Viro 2008-04-28 733 break;
> 02d86a568c6d2d Eric Paris 2012-01-03 734 case AUDIT_FIELD_COMPARE:
> 02d86a568c6d2d Eric Paris 2012-01-03 735 result = audit_field_compare(tsk, cred, f, ctx, name);
> 02d86a568c6d2d Eric Paris 2012-01-03 736 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 737 }
> f562988350361b Tony Jones 2011-04-27 738 if (!result)
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 739 return 0;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 740 }
> 0590b9335a1c72 Al Viro 2008-12-14 741
> 0590b9335a1c72 Al Viro 2008-12-14 742 if (ctx) {
> 0590b9335a1c72 Al Viro 2008-12-14 743 if (rule->filterkey) {
> 0590b9335a1c72 Al Viro 2008-12-14 744 kfree(ctx->filterkey);
> 5adc8a6adc91c4 Amy Griffis 2006-06-14 745 ctx->filterkey = kstrdup(rule->filterkey, GFP_ATOMIC);
> 0590b9335a1c72 Al Viro 2008-12-14 746 }
> 0590b9335a1c72 Al Viro 2008-12-14 747 ctx->prio = rule->prio;
> 0590b9335a1c72 Al Viro 2008-12-14 748 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 749 switch (rule->action) {
> 66b12abc846d31 Paul Moore 2016-06-16 750 case AUDIT_NEVER:
> 619ed58ac4e2fb Sergey Nazarov 2021-06-08 751 *state = AUDIT_STATE_DISABLED;
> 66b12abc846d31 Paul Moore 2016-06-16 752 break;
> 66b12abc846d31 Paul Moore 2016-06-16 753 case AUDIT_ALWAYS:
> 619ed58ac4e2fb Sergey Nazarov 2021-06-08 754 *state = AUDIT_STATE_RECORD;
> 66b12abc846d31 Paul Moore 2016-06-16 755 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 756 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 757 return 1;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 758 }
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/[email protected]
>
> .