From 127d34bbc5ed4cc82676fc5f24550faf27ca0353 Mon Sep 17 00:00:00 2001 From: Paul Moore Date: Fri, 15 Dec 2006 16:49:27 -0500 Subject: [PATCH] --- yaml --- r: 44920 b: refs/heads/master c: 1fd2a25b77bb6755d38aca50b826ff8dca81d762 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/block/cfq-iosched.c | 21 +++++++++++-------- trunk/net/netlabel/netlabel_cipso_v4.c | 28 ++++++++++++++++---------- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/[refs] b/[refs] index 76c88d666292..94bf26b0989a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 719d34027e1a186e46a3952e8a24bf91ecc33837 +refs/heads/master: 1fd2a25b77bb6755d38aca50b826ff8dca81d762 diff --git a/trunk/block/cfq-iosched.c b/trunk/block/cfq-iosched.c index 4b4217d9be78..9fc5eafa6c0e 100644 --- a/trunk/block/cfq-iosched.c +++ b/trunk/block/cfq-iosched.c @@ -577,20 +577,25 @@ static int cfq_allow_merge(request_queue_t *q, struct request *rq, pid_t key; /* - * Disallow merge, if bio and rq aren't both sync or async + * If bio is async or a write, always allow merge */ - if (!!bio_sync(bio) != !!rq_is_sync(rq)) + if (!bio_sync(bio) || rw == WRITE) + return 1; + + /* + * bio is sync. if request is not, disallow. + */ + if (!rq_is_sync(rq)) return 0; /* - * Lookup the cfqq that this bio will be queued with. Allow - * merge only if rq is queued there. + * Ok, both bio and request are sync. Allow merge if they are + * from the same queue. */ - key = cfq_queue_pid(current, rw, bio_sync(bio)); + key = cfq_queue_pid(current, rw, 1); cfqq = cfq_find_cfq_hash(cfqd, key, current->ioprio); - - if (cfqq == RQ_CFQQ(rq)) - return 1; + if (cfqq != RQ_CFQQ(rq)) + return 0; return 1; } diff --git a/trunk/net/netlabel/netlabel_cipso_v4.c b/trunk/net/netlabel/netlabel_cipso_v4.c index 743b05734a49..1fbc906a9737 100644 --- a/trunk/net/netlabel/netlabel_cipso_v4.c +++ b/trunk/net/netlabel/netlabel_cipso_v4.c @@ -185,20 +185,31 @@ static int netlbl_cipsov4_add_std(struct genl_info *info) ret_val = netlbl_cipsov4_add_common(info, doi_def); if (ret_val != 0) goto add_std_failure; + ret_val = -EINVAL; nla_for_each_nested(nla_a, info->attrs[NLBL_CIPSOV4_A_MLSLVLLST], nla_a_rem) if (nla_a->nla_type == NLBL_CIPSOV4_A_MLSLVL) { + if (nla_validate_nested(nla_a, + NLBL_CIPSOV4_A_MAX, + netlbl_cipsov4_genl_policy) != 0) + goto add_std_failure; nla_for_each_nested(nla_b, nla_a, nla_b_rem) switch (nla_b->nla_type) { case NLBL_CIPSOV4_A_MLSLVLLOC: + if (nla_get_u32(nla_b) > + CIPSO_V4_MAX_LOC_LVLS) + goto add_std_failure; if (nla_get_u32(nla_b) >= doi_def->map.std->lvl.local_size) doi_def->map.std->lvl.local_size = nla_get_u32(nla_b) + 1; break; case NLBL_CIPSOV4_A_MLSLVLREM: + if (nla_get_u32(nla_b) > + CIPSO_V4_MAX_REM_LVLS) + goto add_std_failure; if (nla_get_u32(nla_b) >= doi_def->map.std->lvl.cipso_size) doi_def->map.std->lvl.cipso_size = @@ -206,9 +217,6 @@ static int netlbl_cipsov4_add_std(struct genl_info *info) break; } } - if (doi_def->map.std->lvl.local_size > CIPSO_V4_MAX_LOC_LVLS || - doi_def->map.std->lvl.cipso_size > CIPSO_V4_MAX_REM_LVLS) - goto add_std_failure; doi_def->map.std->lvl.local = kcalloc(doi_def->map.std->lvl.local_size, sizeof(u32), GFP_KERNEL); @@ -230,11 +238,6 @@ static int netlbl_cipsov4_add_std(struct genl_info *info) struct nlattr *lvl_loc; struct nlattr *lvl_rem; - if (nla_validate_nested(nla_a, - NLBL_CIPSOV4_A_MAX, - netlbl_cipsov4_genl_policy) != 0) - goto add_std_failure; - lvl_loc = nla_find_nested(nla_a, NLBL_CIPSOV4_A_MLSLVLLOC); lvl_rem = nla_find_nested(nla_a, @@ -264,12 +267,18 @@ static int netlbl_cipsov4_add_std(struct genl_info *info) nla_for_each_nested(nla_b, nla_a, nla_b_rem) switch (nla_b->nla_type) { case NLBL_CIPSOV4_A_MLSCATLOC: + if (nla_get_u32(nla_b) > + CIPSO_V4_MAX_LOC_CATS) + goto add_std_failure; if (nla_get_u32(nla_b) >= doi_def->map.std->cat.local_size) doi_def->map.std->cat.local_size = nla_get_u32(nla_b) + 1; break; case NLBL_CIPSOV4_A_MLSCATREM: + if (nla_get_u32(nla_b) > + CIPSO_V4_MAX_REM_CATS) + goto add_std_failure; if (nla_get_u32(nla_b) >= doi_def->map.std->cat.cipso_size) doi_def->map.std->cat.cipso_size = @@ -277,9 +286,6 @@ static int netlbl_cipsov4_add_std(struct genl_info *info) break; } } - if (doi_def->map.std->cat.local_size > CIPSO_V4_MAX_LOC_CATS || - doi_def->map.std->cat.cipso_size > CIPSO_V4_MAX_REM_CATS) - goto add_std_failure; doi_def->map.std->cat.local = kcalloc( doi_def->map.std->cat.local_size, sizeof(u32),