* [PATCH] correct return value handling in libsemanage
@ 2006-12-21 22:55 Karl MacMillan
2007-01-03 12:28 ` Joshua Brindle
0 siblings, 1 reply; 5+ messages in thread
From: Karl MacMillan @ 2006-12-21 22:55 UTC (permalink / raw)
To: SELinux Mail List, Daniel J Walsh
The function semanage_direct_commit in libsemanage:direct_api.c does not
correctly propagate error codes. This patch fixes that.
Signed-off-by: Karl MacMillan <kmacmillan@mentalrootkit.com>
diff -r 1ecfd5befe3f src/direct_api.c
--- a/src/direct_api.c Thu Dec 21 17:09:45 2006 -0500
+++ b/src/direct_api.c Thu Dec 21 17:47:06 2006 -0500
@@ -603,7 +603,8 @@ static int semanage_direct_commit(semana
/* Create new policy object, then attach to policy databases
* that work with a policydb */
- if (semanage_expand_sandbox(sh, base, &out) < 0)
+ retval = semanage_expand_sandbox(sh, base, &out);
+ if (retval < 0)
goto cleanup;
dbase_policydb_attach((dbase_policydb_t *) pusers_base->dbase,
@@ -615,13 +616,16 @@ static int semanage_direct_commit(semana
/* ============= Apply changes, and verify =============== */
- if (semanage_base_merge_components(sh) < 0)
- goto cleanup;
-
- if (semanage_write_policydb(sh, out) < 0)
- goto cleanup;
-
- if (semanage_verify_kernel(sh) != 0)
+ retval = semanage_base_merge_components(sh);
+ if (retval < 0)
+ goto cleanup;
+
+ retval = semanage_write_policydb(sh, out);
+ if (retval < 0)
+ goto cleanup;
+
+ retval = semanage_verify_kernel(sh);
+ if (retval < 0)
goto cleanup;
}
@@ -635,26 +639,30 @@ static int semanage_direct_commit(semana
* merged into the main file_contexts. We won't check the
* large file_contexts - checked at compile time */
if (sh->do_rebuild || modified || fcontexts_modified) {
- if (semanage_fcontext_validate_local(sh, out) < 0)
+ retval = semanage_fcontext_validate_local(sh, out);
+ if (retval < 0)
goto cleanup;
}
/* Validate local seusers against policy */
if (sh->do_rebuild || modified || seusers_modified) {
- if (semanage_seuser_validate_local(sh, out) < 0)
+ retval = semanage_seuser_validate_local(sh, out);
+ if (retval < 0)
goto cleanup;
}
/* Validate local ports for overlap */
if (sh->do_rebuild || ports_modified) {
- if (semanage_port_validate_local(sh) < 0)
+ retval = semanage_port_validate_local(sh);
+ if (retval < 0)
goto cleanup;
}
/* ================== Write non-policydb components ========= */
/* Commit changes to components */
- if (semanage_commit_components(sh) < 0)
+ retval = semanage_commit_components(sh);
+ if (retval < 0)
goto cleanup;
retval = semanage_install_sandbox(sh);
--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] correct return value handling in libsemanage 2006-12-21 22:55 [PATCH] correct return value handling in libsemanage Karl MacMillan @ 2007-01-03 12:28 ` Joshua Brindle 2007-01-03 16:01 ` Karl MacMillan 0 siblings, 1 reply; 5+ messages in thread From: Joshua Brindle @ 2007-01-03 12:28 UTC (permalink / raw) To: Karl MacMillan; +Cc: SELinux Mail List, Daniel J Walsh Karl MacMillan wrote: > The function semanage_direct_commit in libsemanage:direct_api.c does > not correctly propagate error codes. This patch fixes that. > > Signed-off-by: Karl MacMillan <kmacmillan@mentalrootkit.com> > Acked-By: Joshua Brindle <jbrindle@tresys.com> > > diff -r 1ecfd5befe3f src/direct_api.c > --- a/src/direct_api.c Thu Dec 21 17:09:45 2006 -0500 > +++ b/src/direct_api.c Thu Dec 21 17:47:06 2006 -0500 > @@ -603,7 +603,8 @@ static int semanage_direct_commit(semana > > /* Create new policy object, then attach to policy databases > * that work with a policydb */ > - if (semanage_expand_sandbox(sh, base, &out) < 0) > + retval = semanage_expand_sandbox(sh, base, &out); > + if (retval < 0) > goto cleanup; > > dbase_policydb_attach((dbase_policydb_t *) pusers_base->dbase, > @@ -615,13 +616,16 @@ static int semanage_direct_commit(semana > > /* ============= Apply changes, and verify =============== */ > > - if (semanage_base_merge_components(sh) < 0) > - goto cleanup; > - > - if (semanage_write_policydb(sh, out) < 0) > - goto cleanup; > - > - if (semanage_verify_kernel(sh) != 0) > + retval = semanage_base_merge_components(sh); > + if (retval < 0) > + goto cleanup; > + > + retval = semanage_write_policydb(sh, out); > + if (retval < 0) > + goto cleanup; > + > + retval = semanage_verify_kernel(sh); > + if (retval < 0) > goto cleanup; > } > > @@ -635,26 +639,30 @@ static int semanage_direct_commit(semana > * merged into the main file_contexts. We won't check the > * large file_contexts - checked at compile time */ > if (sh->do_rebuild || modified || fcontexts_modified) { > - if (semanage_fcontext_validate_local(sh, out) < 0) > + retval = semanage_fcontext_validate_local(sh, out); > + if (retval < 0) > goto cleanup; > } > > /* Validate local seusers against policy */ > if (sh->do_rebuild || modified || seusers_modified) { > - if (semanage_seuser_validate_local(sh, out) < 0) > + retval = semanage_seuser_validate_local(sh, out); > + if (retval < 0) > goto cleanup; > } > > /* Validate local ports for overlap */ > if (sh->do_rebuild || ports_modified) { > - if (semanage_port_validate_local(sh) < 0) > + retval = semanage_port_validate_local(sh); > + if (retval < 0) > goto cleanup; > } > > /* ================== Write non-policydb components ========= */ > > /* Commit changes to components */ > - if (semanage_commit_components(sh) < 0) > + retval = semanage_commit_components(sh); > + if (retval < 0) > goto cleanup; > > retval = semanage_install_sandbox(sh); > > > -- > This message was distributed to subscribers of the selinux mailing list. > If you no longer wish to subscribe, send mail to > majordomo@tycho.nsa.gov with > the words "unsubscribe selinux" without quotes as the message. > -- This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with the words "unsubscribe selinux" without quotes as the message. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] correct return value handling in libsemanage 2007-01-03 12:28 ` Joshua Brindle @ 2007-01-03 16:01 ` Karl MacMillan 2007-01-04 21:58 ` Joshua Brindle 0 siblings, 1 reply; 5+ messages in thread From: Karl MacMillan @ 2007-01-03 16:01 UTC (permalink / raw) To: Joshua Brindle; +Cc: SELinux Mail List, Daniel J Walsh Joshua Brindle wrote: > Karl MacMillan wrote: >> The function semanage_direct_commit in libsemanage:direct_api.c does >> not correctly propagate error codes. This patch fixes that. >> >> Signed-off-by: Karl MacMillan <kmacmillan@mentalrootkit.com> >> > Acked-By: Joshua Brindle <jbrindle@tresys.com> The patch I sent was against the rawhide CVS - turns out it doesn't apply cleanly to current upstream. This updated patch applies cleanly and makes all of the returns in that function consisten. Signed-off-by: Karl MacMillan <kmacmillan@mentalrootkit.com> diff -r 46ccd195a21c libsemanage/src/direct_api.c --- a/libsemanage/src/direct_api.c Tue Dec 12 22:38:43 2006 -0500 +++ b/libsemanage/src/direct_api.c Wed Jan 03 09:38:47 2007 -0500 @@ -467,9 +467,11 @@ static int semanage_direct_commit(semana /* Before we do anything else, flush the join to its component parts. * This *does not* flush to disk automatically */ - if (users->dtable->is_modified(users->dbase) && - users->dtable->flush(sh, users->dbase) < 0) - goto cleanup; + if (users->dtable->is_modified(users->dbase)) { + retval = users->dtable->flush(sh, users->dbase); + if (retval < 0) + goto cleanup; + } /* Decide if anything was modified */ fcontexts_modified = fcontexts->dtable->is_modified(fcontexts->dbase); @@ -497,85 +499,97 @@ static int semanage_direct_commit(semana /* =================== Module expansion =============== */ /* link all modules in the sandbox to the base module */ - if (semanage_get_modules_names - (sh, &mod_filenames, &num_modfiles) != 0 - || semanage_verify_modules(sh, mod_filenames, - num_modfiles) == -1 - || semanage_link_sandbox(sh, &base) < 0) { - goto cleanup; - } + retval = semanage_get_modules_names(sh, &mod_filenames, &num_modfiles); + if (retval < 0) + goto cleanup; + retval = semanage_verify_modules(sh, mod_filenames, num_modfiles); + if (retval < 0) + goto cleanup; + retval = semanage_link_sandbox(sh, &base); + if (retval < 0) + goto cleanup; /* write the linked base */ - if ((linked_filename = - semanage_path(SEMANAGE_TMP, SEMANAGE_LINKED)) == NULL - || semanage_write_module(sh, linked_filename, base) == -1 - || semanage_verify_linked(sh) != 0) { - goto cleanup; - } + linked_filename = semanage_path(SEMANAGE_TMP, SEMANAGE_LINKED); + if (linked_filename == NULL) { + retval = -1; + goto cleanup; + } + retval = semanage_write_module(sh, linked_filename, base); + if (retval < 0) + goto cleanup; + retval = semanage_verify_linked(sh); + if (retval < 0) + goto cleanup; /* ==================== File-backed ================== */ /* File Contexts */ /* Sort the file contexts. */ - if (semanage_fc_sort - (sh, sepol_module_package_get_file_contexts(base), - sepol_module_package_get_file_contexts_len(base), - &sorted_fc_buffer, &sorted_fc_buffer_len) == -1) { - goto cleanup; - } + retval = semanage_fc_sort(sh, sepol_module_package_get_file_contexts(base), + sepol_module_package_get_file_contexts_len(base), + &sorted_fc_buffer, &sorted_fc_buffer_len); + if (retval < 0) + goto cleanup; /* Write the contexts (including template contexts) to a single file. * The buffer returned by the sort function has a trailing \0 character, * which we do NOT want to write out to disk, so we pass sorted_fc_buffer_len-1. */ - if ((ofilename = - semanage_path(SEMANAGE_TMP, SEMANAGE_FC_TMPL)) == NULL - || write_file(sh, ofilename, sorted_fc_buffer, - sorted_fc_buffer_len - 1) == -1) { - goto cleanup; - } + ofilename = semanage_path(SEMANAGE_TMP, SEMANAGE_FC_TMPL); + if (ofilename == NULL) { + retval = -1; + goto cleanup; + } + retval = write_file(sh, ofilename, sorted_fc_buffer, + sorted_fc_buffer_len - 1); + if (retval < 0) + goto cleanup; /* Split complete and template file contexts into their separate files. */ - if (semanage_split_fc(sh)) + retval = semanage_split_fc(sh); + if (retval < 0) goto cleanup; pfcontexts->dtable->drop_cache(pfcontexts->dbase); /* Seusers */ if (sepol_module_package_get_seusers_len(base)) { - if ((ofilename = - semanage_path(SEMANAGE_TMP, - SEMANAGE_SEUSERS)) == NULL - || write_file(sh, ofilename, - sepol_module_package_get_seusers - (base), - sepol_module_package_get_seusers_len - (base)) == -1) { + ofilename = semanage_path(SEMANAGE_TMP, SEMANAGE_SEUSERS); + if (ofilename == NULL) { + retval = -1; goto cleanup; } + retval = write_file(sh, ofilename, + sepol_module_package_get_seusers(base), + sepol_module_package_get_seusers_len(base)); + if (retval < 0) + goto cleanup; + pseusers->dtable->drop_cache(pseusers->dbase); } else { - if (pseusers->dtable->clear(sh, pseusers->dbase) < 0) + retval = pseusers->dtable->clear(sh, pseusers->dbase); + if (retval < 0) goto cleanup; } /* Users_extra */ if (sepol_module_package_get_user_extra_len(base)) { - if ((ofilename = - semanage_path(SEMANAGE_TMP, - SEMANAGE_USERS_EXTRA)) == NULL - || write_file(sh, ofilename, - sepol_module_package_get_user_extra - (base), - sepol_module_package_get_user_extra_len - (base)) == -1) { + ofilename = semanage_path(SEMANAGE_TMP, SEMANAGE_USERS_EXTRA); + if (ofilename == NULL) { + retval = -1; goto cleanup; } + retval = write_file(sh, ofilename, + sepol_module_package_get_user_extra(base), + sepol_module_package_get_user_extra_len(base)); + if (retval < 0) + goto cleanup; pusers_extra->dtable->drop_cache(pusers_extra->dbase); } else { - if (pusers_extra->dtable-> - clear(sh, pusers_extra->dbase) < 0) + retval = pusers_extra->dtable->clear(sh, pusers_extra->dbase); + if (retval < 0) goto cleanup; } @@ -603,7 +617,8 @@ static int semanage_direct_commit(semana /* Create new policy object, then attach to policy databases * that work with a policydb */ - if (semanage_expand_sandbox(sh, base, &out) < 0) + retval = semanage_expand_sandbox(sh, base, &out); + if (retval < 0) goto cleanup; dbase_policydb_attach((dbase_policydb_t *) pusers_base->dbase, @@ -615,13 +630,16 @@ static int semanage_direct_commit(semana /* ============= Apply changes, and verify =============== */ - if (semanage_base_merge_components(sh) < 0) - goto cleanup; - - if (semanage_write_policydb(sh, out) < 0) - goto cleanup; - - if (semanage_verify_kernel(sh) != 0) + retval = semanage_base_merge_components(sh); + if (retval < 0) + goto cleanup; + + retval = semanage_write_policydb(sh, out); + if (retval < 0) + goto cleanup; + + retval = semanage_verify_kernel(sh); + if (retval < 0) goto cleanup; } @@ -635,26 +653,30 @@ static int semanage_direct_commit(semana * merged into the main file_contexts. We won't check the * large file_contexts - checked at compile time */ if (sh->do_rebuild || modified || fcontexts_modified) { - if (semanage_fcontext_validate_local(sh, out) < 0) + retval = semanage_fcontext_validate_local(sh, out); + if (retval < 0) goto cleanup; } /* Validate local seusers against policy */ if (sh->do_rebuild || modified || seusers_modified) { - if (semanage_seuser_validate_local(sh, out) < 0) + retval = semanage_seuser_validate_local(sh, out); + if (retval < 0) goto cleanup; } /* Validate local ports for overlap */ if (sh->do_rebuild || ports_modified) { - if (semanage_port_validate_local(sh) < 0) + retval = semanage_port_validate_local(sh); + if (retval < 0) goto cleanup; } /* ================== Write non-policydb components ========= */ /* Commit changes to components */ - if (semanage_commit_components(sh) < 0) + retval = semanage_commit_components(sh); + if (retval < 0) goto cleanup; retval = semanage_install_sandbox(sh); -- This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with the words "unsubscribe selinux" without quotes as the message. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] correct return value handling in libsemanage 2007-01-03 16:01 ` Karl MacMillan @ 2007-01-04 21:58 ` Joshua Brindle 2007-01-05 15:13 ` Stephen Smalley 0 siblings, 1 reply; 5+ messages in thread From: Joshua Brindle @ 2007-01-04 21:58 UTC (permalink / raw) To: Karl MacMillan; +Cc: SELinux Mail List, Daniel J Walsh Karl MacMillan wrote: > Joshua Brindle wrote: >> Karl MacMillan wrote: >>> The function semanage_direct_commit in libsemanage:direct_api.c does >>> not correctly propagate error codes. This patch fixes that. >>> >>> Signed-off-by: Karl MacMillan <kmacmillan@mentalrootkit.com> >>> >> Acked-By: Joshua Brindle <jbrindle@tresys.com> > > The patch I sent was against the rawhide CVS - turns out it doesn't > apply cleanly to current upstream. This updated patch applies cleanly > and makes all of the returns in that function consisten. > Oh good, I was beginning to think I had forgotten how to use patch over my vacation :) I'll merge this and the patch to remove linked and backup copies soon if there are no objections. > Signed-off-by: Karl MacMillan <kmacmillan@mentalrootkit.com> > > diff -r 46ccd195a21c libsemanage/src/direct_api.c > --- a/libsemanage/src/direct_api.c Tue Dec 12 22:38:43 2006 -0500 > +++ b/libsemanage/src/direct_api.c Wed Jan 03 09:38:47 2007 -0500 > @@ -467,9 +467,11 @@ static int semanage_direct_commit(semana > > /* Before we do anything else, flush the join to its component parts. > * This *does not* flush to disk automatically */ > - if (users->dtable->is_modified(users->dbase) && > - users->dtable->flush(sh, users->dbase) < 0) > - goto cleanup; > + if (users->dtable->is_modified(users->dbase)) { > + retval = users->dtable->flush(sh, users->dbase); > + if (retval < 0) > + goto cleanup; > + } > > /* Decide if anything was modified */ > fcontexts_modified = fcontexts->dtable->is_modified(fcontexts->dbase); > @@ -497,85 +499,97 @@ static int semanage_direct_commit(semana > /* =================== Module expansion =============== */ > > /* link all modules in the sandbox to the base module */ > - if (semanage_get_modules_names > - (sh, &mod_filenames, &num_modfiles) != 0 > - || semanage_verify_modules(sh, mod_filenames, > - num_modfiles) == -1 > - || semanage_link_sandbox(sh, &base) < 0) { > - goto cleanup; > - } > + retval = semanage_get_modules_names(sh, &mod_filenames, > &num_modfiles); > + if (retval < 0) > + goto cleanup; > + retval = semanage_verify_modules(sh, mod_filenames, num_modfiles); > + if (retval < 0) > + goto cleanup; > + retval = semanage_link_sandbox(sh, &base); > + if (retval < 0) > + goto cleanup; > > /* write the linked base */ > - if ((linked_filename = > - semanage_path(SEMANAGE_TMP, SEMANAGE_LINKED)) == NULL > - || semanage_write_module(sh, linked_filename, base) == -1 > - || semanage_verify_linked(sh) != 0) { > - goto cleanup; > - } > + linked_filename = semanage_path(SEMANAGE_TMP, SEMANAGE_LINKED); > + if (linked_filename == NULL) { > + retval = -1; > + goto cleanup; > + } > + retval = semanage_write_module(sh, linked_filename, base); > + if (retval < 0) > + goto cleanup; > + retval = semanage_verify_linked(sh); > + if (retval < 0) > + goto cleanup; > > /* ==================== File-backed ================== */ > > /* File Contexts */ > /* Sort the file contexts. */ > - if (semanage_fc_sort > - (sh, sepol_module_package_get_file_contexts(base), > - sepol_module_package_get_file_contexts_len(base), > - &sorted_fc_buffer, &sorted_fc_buffer_len) == -1) { > - goto cleanup; > - } > + retval = semanage_fc_sort(sh, > sepol_module_package_get_file_contexts(base), > + sepol_module_package_get_file_contexts_len(base), > + &sorted_fc_buffer, &sorted_fc_buffer_len); > + if (retval < 0) > + goto cleanup; > > /* Write the contexts (including template contexts) to a single > file. > * The buffer returned by the sort function has a trailing \0 > character, > * which we do NOT want to write out to disk, so we pass > sorted_fc_buffer_len-1. */ > - if ((ofilename = > - semanage_path(SEMANAGE_TMP, SEMANAGE_FC_TMPL)) == NULL > - || write_file(sh, ofilename, sorted_fc_buffer, > - sorted_fc_buffer_len - 1) == -1) { > - goto cleanup; > - } > + ofilename = semanage_path(SEMANAGE_TMP, SEMANAGE_FC_TMPL); > + if (ofilename == NULL) { > + retval = -1; > + goto cleanup; > + } > + retval = write_file(sh, ofilename, sorted_fc_buffer, > + sorted_fc_buffer_len - 1); > + if (retval < 0) > + goto cleanup; > > /* Split complete and template file contexts into their > separate files. */ > - if (semanage_split_fc(sh)) > + retval = semanage_split_fc(sh); > + if (retval < 0) > goto cleanup; > > pfcontexts->dtable->drop_cache(pfcontexts->dbase); > > /* Seusers */ > if (sepol_module_package_get_seusers_len(base)) { > - if ((ofilename = > - semanage_path(SEMANAGE_TMP, > - SEMANAGE_SEUSERS)) == NULL > - || write_file(sh, ofilename, > - sepol_module_package_get_seusers > - (base), > - sepol_module_package_get_seusers_len > - (base)) == -1) { > + ofilename = semanage_path(SEMANAGE_TMP, SEMANAGE_SEUSERS); > + if (ofilename == NULL) { > + retval = -1; > goto cleanup; > } > + retval = write_file(sh, ofilename, > + sepol_module_package_get_seusers(base), > + sepol_module_package_get_seusers_len(base)); > + if (retval < 0) > + goto cleanup; > + > pseusers->dtable->drop_cache(pseusers->dbase); > > } else { > - if (pseusers->dtable->clear(sh, pseusers->dbase) < 0) > + retval = pseusers->dtable->clear(sh, pseusers->dbase); > + if (retval < 0) > goto cleanup; > } > > /* Users_extra */ > if (sepol_module_package_get_user_extra_len(base)) { > - if ((ofilename = > - semanage_path(SEMANAGE_TMP, > - SEMANAGE_USERS_EXTRA)) == NULL > - || write_file(sh, ofilename, > - sepol_module_package_get_user_extra > - (base), > - sepol_module_package_get_user_extra_len > - (base)) == -1) { > + ofilename = semanage_path(SEMANAGE_TMP, SEMANAGE_USERS_EXTRA); > + if (ofilename == NULL) { > + retval = -1; > goto cleanup; > } > + retval = write_file(sh, ofilename, > + sepol_module_package_get_user_extra(base), > + sepol_module_package_get_user_extra_len(base)); > + if (retval < 0) > + goto cleanup; > pusers_extra->dtable->drop_cache(pusers_extra->dbase); > > } else { > - if (pusers_extra->dtable-> > - clear(sh, pusers_extra->dbase) < 0) > + retval = pusers_extra->dtable->clear(sh, pusers_extra->dbase); > + if (retval < 0) > goto cleanup; > } > > @@ -603,7 +617,8 @@ static int semanage_direct_commit(semana > > /* Create new policy object, then attach to policy databases > * that work with a policydb */ > - if (semanage_expand_sandbox(sh, base, &out) < 0) > + retval = semanage_expand_sandbox(sh, base, &out); > + if (retval < 0) > goto cleanup; > > dbase_policydb_attach((dbase_policydb_t *) pusers_base->dbase, > @@ -615,13 +630,16 @@ static int semanage_direct_commit(semana > > /* ============= Apply changes, and verify =============== */ > > - if (semanage_base_merge_components(sh) < 0) > - goto cleanup; > - > - if (semanage_write_policydb(sh, out) < 0) > - goto cleanup; > - > - if (semanage_verify_kernel(sh) != 0) > + retval = semanage_base_merge_components(sh); > + if (retval < 0) > + goto cleanup; > + > + retval = semanage_write_policydb(sh, out); > + if (retval < 0) > + goto cleanup; > + > + retval = semanage_verify_kernel(sh); > + if (retval < 0) > goto cleanup; > } > > @@ -635,26 +653,30 @@ static int semanage_direct_commit(semana > * merged into the main file_contexts. We won't check the > * large file_contexts - checked at compile time */ > if (sh->do_rebuild || modified || fcontexts_modified) { > - if (semanage_fcontext_validate_local(sh, out) < 0) > + retval = semanage_fcontext_validate_local(sh, out); > + if (retval < 0) > goto cleanup; > } > > /* Validate local seusers against policy */ > if (sh->do_rebuild || modified || seusers_modified) { > - if (semanage_seuser_validate_local(sh, out) < 0) > + retval = semanage_seuser_validate_local(sh, out); > + if (retval < 0) > goto cleanup; > } > > /* Validate local ports for overlap */ > if (sh->do_rebuild || ports_modified) { > - if (semanage_port_validate_local(sh) < 0) > + retval = semanage_port_validate_local(sh); > + if (retval < 0) > goto cleanup; > } > > /* ================== Write non-policydb components ========= */ > > /* Commit changes to components */ > - if (semanage_commit_components(sh) < 0) > + retval = semanage_commit_components(sh); > + if (retval < 0) > goto cleanup; > > retval = semanage_install_sandbox(sh); > > -- This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with the words "unsubscribe selinux" without quotes as the message. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] correct return value handling in libsemanage 2007-01-04 21:58 ` Joshua Brindle @ 2007-01-05 15:13 ` Stephen Smalley 0 siblings, 0 replies; 5+ messages in thread From: Stephen Smalley @ 2007-01-05 15:13 UTC (permalink / raw) To: Joshua Brindle; +Cc: Karl MacMillan, SELinux Mail List, Daniel J Walsh On Thu, 2007-01-04 at 16:58 -0500, Joshua Brindle wrote: > Karl MacMillan wrote: > > Joshua Brindle wrote: > >> Karl MacMillan wrote: > >>> The function semanage_direct_commit in libsemanage:direct_api.c does > >>> not correctly propagate error codes. This patch fixes that. > >>> > >>> Signed-off-by: Karl MacMillan <kmacmillan@mentalrootkit.com> > >>> > >> Acked-By: Joshua Brindle <jbrindle@tresys.com> > > > > The patch I sent was against the rawhide CVS - turns out it doesn't > > apply cleanly to current upstream. This updated patch applies cleanly > > and makes all of the returns in that function consisten. > > > > Oh good, I was beginning to think I had forgotten how to use patch over > my vacation :) > > I'll merge this and the patch to remove linked and backup copies soon if > there are no objections. No objection to this one, but I think a few cleanups should be made to the other one prior to merging. > > > Signed-off-by: Karl MacMillan <kmacmillan@mentalrootkit.com> > > > > diff -r 46ccd195a21c libsemanage/src/direct_api.c > > --- a/libsemanage/src/direct_api.c Tue Dec 12 22:38:43 2006 -0500 > > +++ b/libsemanage/src/direct_api.c Wed Jan 03 09:38:47 2007 -0500 > > @@ -467,9 +467,11 @@ static int semanage_direct_commit(semana > > > > /* Before we do anything else, flush the join to its component parts. > > * This *does not* flush to disk automatically */ > > - if (users->dtable->is_modified(users->dbase) && > > - users->dtable->flush(sh, users->dbase) < 0) > > - goto cleanup; > > + if (users->dtable->is_modified(users->dbase)) { > > + retval = users->dtable->flush(sh, users->dbase); > > + if (retval < 0) > > + goto cleanup; > > + } > > > > /* Decide if anything was modified */ > > fcontexts_modified = fcontexts->dtable->is_modified(fcontexts->dbase); > > @@ -497,85 +499,97 @@ static int semanage_direct_commit(semana > > /* =================== Module expansion =============== */ > > > > /* link all modules in the sandbox to the base module */ > > - if (semanage_get_modules_names > > - (sh, &mod_filenames, &num_modfiles) != 0 > > - || semanage_verify_modules(sh, mod_filenames, > > - num_modfiles) == -1 > > - || semanage_link_sandbox(sh, &base) < 0) { > > - goto cleanup; > > - } > > + retval = semanage_get_modules_names(sh, &mod_filenames, > > &num_modfiles); > > + if (retval < 0) > > + goto cleanup; > > + retval = semanage_verify_modules(sh, mod_filenames, num_modfiles); > > + if (retval < 0) > > + goto cleanup; > > + retval = semanage_link_sandbox(sh, &base); > > + if (retval < 0) > > + goto cleanup; > > > > /* write the linked base */ > > - if ((linked_filename = > > - semanage_path(SEMANAGE_TMP, SEMANAGE_LINKED)) == NULL > > - || semanage_write_module(sh, linked_filename, base) == -1 > > - || semanage_verify_linked(sh) != 0) { > > - goto cleanup; > > - } > > + linked_filename = semanage_path(SEMANAGE_TMP, SEMANAGE_LINKED); > > + if (linked_filename == NULL) { > > + retval = -1; > > + goto cleanup; > > + } > > + retval = semanage_write_module(sh, linked_filename, base); > > + if (retval < 0) > > + goto cleanup; > > + retval = semanage_verify_linked(sh); > > + if (retval < 0) > > + goto cleanup; > > > > /* ==================== File-backed ================== */ > > > > /* File Contexts */ > > /* Sort the file contexts. */ > > - if (semanage_fc_sort > > - (sh, sepol_module_package_get_file_contexts(base), > > - sepol_module_package_get_file_contexts_len(base), > > - &sorted_fc_buffer, &sorted_fc_buffer_len) == -1) { > > - goto cleanup; > > - } > > + retval = semanage_fc_sort(sh, > > sepol_module_package_get_file_contexts(base), > > + sepol_module_package_get_file_contexts_len(base), > > + &sorted_fc_buffer, &sorted_fc_buffer_len); > > + if (retval < 0) > > + goto cleanup; > > > > /* Write the contexts (including template contexts) to a single > > file. > > * The buffer returned by the sort function has a trailing \0 > > character, > > * which we do NOT want to write out to disk, so we pass > > sorted_fc_buffer_len-1. */ > > - if ((ofilename = > > - semanage_path(SEMANAGE_TMP, SEMANAGE_FC_TMPL)) == NULL > > - || write_file(sh, ofilename, sorted_fc_buffer, > > - sorted_fc_buffer_len - 1) == -1) { > > - goto cleanup; > > - } > > + ofilename = semanage_path(SEMANAGE_TMP, SEMANAGE_FC_TMPL); > > + if (ofilename == NULL) { > > + retval = -1; > > + goto cleanup; > > + } > > + retval = write_file(sh, ofilename, sorted_fc_buffer, > > + sorted_fc_buffer_len - 1); > > + if (retval < 0) > > + goto cleanup; > > > > /* Split complete and template file contexts into their > > separate files. */ > > - if (semanage_split_fc(sh)) > > + retval = semanage_split_fc(sh); > > + if (retval < 0) > > goto cleanup; > > > > pfcontexts->dtable->drop_cache(pfcontexts->dbase); > > > > /* Seusers */ > > if (sepol_module_package_get_seusers_len(base)) { > > - if ((ofilename = > > - semanage_path(SEMANAGE_TMP, > > - SEMANAGE_SEUSERS)) == NULL > > - || write_file(sh, ofilename, > > - sepol_module_package_get_seusers > > - (base), > > - sepol_module_package_get_seusers_len > > - (base)) == -1) { > > + ofilename = semanage_path(SEMANAGE_TMP, SEMANAGE_SEUSERS); > > + if (ofilename == NULL) { > > + retval = -1; > > goto cleanup; > > } > > + retval = write_file(sh, ofilename, > > + sepol_module_package_get_seusers(base), > > + sepol_module_package_get_seusers_len(base)); > > + if (retval < 0) > > + goto cleanup; > > + > > pseusers->dtable->drop_cache(pseusers->dbase); > > > > } else { > > - if (pseusers->dtable->clear(sh, pseusers->dbase) < 0) > > + retval = pseusers->dtable->clear(sh, pseusers->dbase); > > + if (retval < 0) > > goto cleanup; > > } > > > > /* Users_extra */ > > if (sepol_module_package_get_user_extra_len(base)) { > > - if ((ofilename = > > - semanage_path(SEMANAGE_TMP, > > - SEMANAGE_USERS_EXTRA)) == NULL > > - || write_file(sh, ofilename, > > - sepol_module_package_get_user_extra > > - (base), > > - sepol_module_package_get_user_extra_len > > - (base)) == -1) { > > + ofilename = semanage_path(SEMANAGE_TMP, SEMANAGE_USERS_EXTRA); > > + if (ofilename == NULL) { > > + retval = -1; > > goto cleanup; > > } > > + retval = write_file(sh, ofilename, > > + sepol_module_package_get_user_extra(base), > > + sepol_module_package_get_user_extra_len(base)); > > + if (retval < 0) > > + goto cleanup; > > pusers_extra->dtable->drop_cache(pusers_extra->dbase); > > > > } else { > > - if (pusers_extra->dtable-> > > - clear(sh, pusers_extra->dbase) < 0) > > + retval = pusers_extra->dtable->clear(sh, pusers_extra->dbase); > > + if (retval < 0) > > goto cleanup; > > } > > > > @@ -603,7 +617,8 @@ static int semanage_direct_commit(semana > > > > /* Create new policy object, then attach to policy databases > > * that work with a policydb */ > > - if (semanage_expand_sandbox(sh, base, &out) < 0) > > + retval = semanage_expand_sandbox(sh, base, &out); > > + if (retval < 0) > > goto cleanup; > > > > dbase_policydb_attach((dbase_policydb_t *) pusers_base->dbase, > > @@ -615,13 +630,16 @@ static int semanage_direct_commit(semana > > > > /* ============= Apply changes, and verify =============== */ > > > > - if (semanage_base_merge_components(sh) < 0) > > - goto cleanup; > > - > > - if (semanage_write_policydb(sh, out) < 0) > > - goto cleanup; > > - > > - if (semanage_verify_kernel(sh) != 0) > > + retval = semanage_base_merge_components(sh); > > + if (retval < 0) > > + goto cleanup; > > + > > + retval = semanage_write_policydb(sh, out); > > + if (retval < 0) > > + goto cleanup; > > + > > + retval = semanage_verify_kernel(sh); > > + if (retval < 0) > > goto cleanup; > > } > > > > @@ -635,26 +653,30 @@ static int semanage_direct_commit(semana > > * merged into the main file_contexts. We won't check the > > * large file_contexts - checked at compile time */ > > if (sh->do_rebuild || modified || fcontexts_modified) { > > - if (semanage_fcontext_validate_local(sh, out) < 0) > > + retval = semanage_fcontext_validate_local(sh, out); > > + if (retval < 0) > > goto cleanup; > > } > > > > /* Validate local seusers against policy */ > > if (sh->do_rebuild || modified || seusers_modified) { > > - if (semanage_seuser_validate_local(sh, out) < 0) > > + retval = semanage_seuser_validate_local(sh, out); > > + if (retval < 0) > > goto cleanup; > > } > > > > /* Validate local ports for overlap */ > > if (sh->do_rebuild || ports_modified) { > > - if (semanage_port_validate_local(sh) < 0) > > + retval = semanage_port_validate_local(sh); > > + if (retval < 0) > > goto cleanup; > > } > > > > /* ================== Write non-policydb components ========= */ > > > > /* Commit changes to components */ > > - if (semanage_commit_components(sh) < 0) > > + retval = semanage_commit_components(sh); > > + if (retval < 0) > > goto cleanup; > > > > retval = semanage_install_sandbox(sh); > > > > > > > > -- > This message was distributed to subscribers of the selinux mailing list. > If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with > the words "unsubscribe selinux" without quotes as the message. -- Stephen Smalley National Security Agency -- This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with the words "unsubscribe selinux" without quotes as the message. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-01-05 15:13 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-12-21 22:55 [PATCH] correct return value handling in libsemanage Karl MacMillan 2007-01-03 12:28 ` Joshua Brindle 2007-01-03 16:01 ` Karl MacMillan 2007-01-04 21:58 ` Joshua Brindle 2007-01-05 15:13 ` Stephen Smalley
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.