diff -r f27ba31b7e96 -r 6f7b9039715f no_shm_selinux/Current_prop.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/no_shm_selinux/Current_prop.thy Tue Dec 17 13:30:21 2013 +0800 @@ -0,0 +1,107 @@ +(*<*) +theory Current_prop +imports Main Flask_type Flask My_list_prefix Init_prop Valid_prop Delete_prop +begin +(*>*) + +context tainting begin + +(* +lemma procs_of_shm_prop1: "\ p_flag \ procs_of_shm s h; valid s\ \ h \ current_shms s" +apply (induct s arbitrary:p_flag) +apply (case_tac p_flag, simp, drule init_procs_has_shm, simp) +apply (frule vd_cons, frule vt_grant_os) +apply (case_tac a, auto split:if_splits option.splits) +done + +lemma procs_of_shm_prop2: "\(p, flag) \ procs_of_shm s h; valid s\ \ p \ current_procs s" +apply (induct s arbitrary:p flag) +apply (simp, drule init_procs_has_shm, simp) +apply (frule vd_cons, frule vt_grant_os) +apply (case_tac a, auto split:if_splits option.splits) +done + +lemma procs_of_shm_prop2': + "\p \ current_procs s; valid s\ \ \ flag h. (p, flag) \ procs_of_shm s h" +by (auto dest:procs_of_shm_prop2) + +lemma procs_of_shm_prop3: "\(p, flag) \ procs_of_shm s h; (p, flag') \ procs_of_shm s h; valid s\ + \ flag = flag'" +apply (induct s arbitrary:p flag flag') +apply (simp, drule_tac flag = flag in init_procs_has_shm, drule_tac flag = flag' in init_procs_has_shm, simp) +apply (frule vd_cons, frule vt_grant_os) +apply (case_tac a, auto split:if_splits option.splits dest:procs_of_shm_prop2) +done + +lemma procs_of_shm_prop4: "\(p, flag) \ procs_of_shm s h; valid s\ \ flag_of_proc_shm s p h = Some flag" +apply (induct s arbitrary:p flag) +apply (simp, drule init_procs_has_shm, simp) +apply (frule vd_cons, frule vt_grant_os) +apply (case_tac a, auto split:if_splits option.splits dest:procs_of_shm_prop2) +done + +lemma procs_of_shm_prop4': + "\flag_of_proc_shm s p h = None; valid s\ \ \ flag. (p, flag) \ procs_of_shm s h" +by (auto dest:procs_of_shm_prop4) +*) + +lemma not_init_intro_proc: + "\p \ current_procs s; valid s\ \ died (O_proc p) s \ p \ init_procs" +using not_died_init_proc by auto + +lemma not_init_intro_proc': + "\p \ current_procs s; valid s\ \ \ (\ died (O_proc p) s \ p \ init_procs)" +using not_died_init_proc by auto + +(* +lemma info_shm_flow_in_procs: + "\info_flow_shm s p p'; valid s\ \ p \ current_procs s \ p' \ current_procs s" +by (auto intro:procs_of_shm_prop2 simp:info_flow_shm_def one_flow_shm_def) + +lemma flag_of_proc_shm_prop1: + "\flag_of_proc_shm s p h = Some flag; valid s\ \ (p, flag) \ procs_of_shm s h" +apply (induct s arbitrary:p flag) +apply (simp, drule init_shmflag_has_proc, simp) +apply (frule vd_cons, frule vt_grant_os) +apply (case_tac a, auto split:if_splits option.splits dest:procs_of_shm_prop2) +done +*) + +lemma has_same_inode_in_current: + "\has_same_inode s f f'; valid s\ \ f \ current_files s \ f' \ current_files s" +by (auto simp add:has_same_inode_def current_files_def same_inode_files_def + is_file_def split:if_splits option.splits) + + +lemma has_same_inode_prop1: + "\has_same_inode s f f'; is_file s f; valid s\ \ is_file s f'" +by (auto simp:has_same_inode_def same_inode_files_def is_file_def) + +lemma has_same_inode_prop1': + "\has_same_inode s f f'; is_file s f'; valid s\ \ is_file s f" +by (auto simp:has_same_inode_def is_file_def same_inode_files_def + split:if_splits option.splits) + +lemma has_same_inode_prop2: + "\has_same_inode s f f'; file_of_proc_fd s p fd = Some f; valid s\ \ is_file s f'" +apply (drule has_same_inode_prop1) +apply (simp add:file_of_pfd_is_file, simp+) +done + +lemma has_same_inode_prop2': + "\has_same_inode s f f'; file_of_proc_fd s p fd = Some f'; valid s\ \ is_file s f" +apply (drule has_same_inode_prop1') +apply (simp add:file_of_pfd_is_file, simp+) +done + +lemma tobj_in_init_alive: + "tobj_in_init obj \ init_alive obj" +by (case_tac obj, auto) + +lemma tobj_in_alive: + "tobj_in_init obj \ alive [] obj" +by (case_tac obj, auto simp:is_file_nil) + +end + +end \ No newline at end of file