find bugs in deleted & inum_of_file
authorchunhan
Thu, 16 May 2013 15:18:44 +0800
changeset 8 289a30c4cfb7
parent 7 f27882976251
child 9 87fdf2de0ffa
find bugs in deleted & inum_of_file
Co2sobj_prop.thy
Flask.thy
Sectxt_prop.thy
--- a/Co2sobj_prop.thy	Wed May 15 15:42:46 2013 +0800
+++ b/Co2sobj_prop.thy	Thu May 16 15:18:44 2013 +0800
@@ -6,7 +6,7 @@
 
 context tainting_s begin
 
-(************ simpset for cf2sfile ***************)
+(****************** cf2sfile path simpset ***************)
 
 lemma sroot_only:
   "cf2sfile s [] = Some sroot"
@@ -34,7 +34,7 @@
 apply (frule parentf_is_dir'', simp)
 apply (frule is_file_or_dir, simp)
 apply (auto dest!:current_has_sec'
-            simp:cf2sfile_def split:option.splits if_splits dest!:get_pfs_secs_prop)
+            simp:cf2sfile_def split:option.splits if_splits dest!:get_pfs_secs_prop')
 done
 
 definition sectxt_of_pf :: "t_state \<Rightarrow> t_file \<Rightarrow> security_context_t option"
@@ -132,50 +132,42 @@
 apply (auto split:option.splits)
 done
 
-
+lemma cf2sfile_path_file_prop1:
+  "\<lbrakk>is_file s (f # pf); cf2sfile s pf = Some (pfi, pfsec, psec, asecs); valid s\<rbrakk>
+   \<Longrightarrow> \<exists> fsec. cf2sfile s (f # pf) = 
+                 Some (if (\<not> deleted (O_file (f # pf)) s \<and> is_init_file (f # pf)) then Init (f # pf)
+                       else Created, fsec, Some pfsec, asecs \<union> {pfsec}) \<and> 
+               sectxt_of_obj s (O_file (f # pf)) = Some fsec"
+apply (frule is_file_has_sfile, simp)
+by (auto simp:cf2sfile_path_file)
 
-apply simp
+lemma cf2sfile_path_file_prop2:
+  "\<lbrakk>is_file s (f # pf); cf2sfile s pf = Some (pfi, pfsec, psec, asecs); 
+    sectxt_of_obj s (O_file (f # pf)) = Some fsec; valid s\<rbrakk> \<Longrightarrow> cf2sfile s (f # pf) = 
+      Some (if (\<not> deleted (O_file (f # pf)) s \<and> is_init_file (f # pf)) then Init (f # pf)
+            else Created, fsec, Some pfsec, asecs \<union> {pfsec})"
+by (drule cf2sfile_path_file_prop1, auto)
 
-thm cf2sfile_def
-apply (simp (no_asm_simp))
-apply simp
-apply (frule cf2sfile_path_file, simp)
-apply (simp add: cf2sfile_path_file)
-apply auto
-apply (simp only:cf2sfile_path_file)
-by (simp add:cf2sfile_path_file cf2sfile_path_dir)
-apply (frule parentf_is_dir'', simp)
-apply (frule is_file_or_dir, simp)
-apply (frule sroot_set, erule disjE)
-apply (frule is_dir_has_sfile, simp, frule is_file_has_sfile, simp)
-apply (case_tac pf, clarsimp)
-apply (auto dest!:is_file_has_sec' is_dir_has_sec' get_pfs_secs_prop simp:cf2sfile_def get_parentfs_ctxts.simps
-            simp:get_parentfs_ctxts'_def sectxt_of_pf_def split:option.splits if_splits)[1]
-apply (auto dest!:is_file_has_sec' is_dir_has_sec' get_pfs_secs_prop 
-            simp:get_parentfs_ctxts'_def sectxt_of_pf_def split:option.splits if_splits)[1]
-apply (case_tac "is_file s (f # pf)")
-apply (frule is_file_has_sec, simp)
-apply (frule is_dir_has_sec, simp)
-apply (frule is_dir_not_file)
-apply (erule exE)+
-apply (auto split:option.splits)[1]
-apply simp
+lemma cf2sfile_path_dir_prop1:
+  "\<lbrakk>is_dir s (f # pf); cf2sfile s pf = Some (pfi, pfsec, psec, asecs); valid s\<rbrakk>
+   \<Longrightarrow> \<exists> fsec. cf2sfile s (f # pf) = 
+                 Some (if (\<not> deleted (O_dir (f # pf)) s \<and> is_init_dir (f # pf)) then Init (f # pf)
+                       else Created, fsec, Some pfsec, asecs \<union> {pfsec}) \<and> 
+               sectxt_of_obj s (O_dir (f # pf)) = Some fsec"
+apply (frule is_dir_has_sfile, simp)
+by (auto simp:cf2sfile_path_dir)
 
-apply (rule ext)
-apply (subst (1) cf2sfile_def)
-apply (auto simp del:deleted.simps get_parentfs_ctxts.simps split:option.splits if_splits)
+lemma cf2sfile_path_dir_prop2:
+  "\<lbrakk>is_dir s (f # pf); cf2sfile s pf = Some (pfi, pfsec, psec, asecs); 
+    sectxt_of_obj s (O_dir (f # pf)) = Some fsec; valid s\<rbrakk> \<Longrightarrow> cf2sfile s (f # pf) = 
+      Some (if (\<not> deleted (O_dir (f # pf)) s \<and> is_init_dir (f # pf)) then Init (f # pf)
+            else Created, fsec, Some pfsec, asecs \<union> {pfsec})"
+by (drule cf2sfile_path_dir_prop1, auto)
 
-lemma cf2sfile_open_none1:
-  "valid (Open p f flag fd None # s) \<Longrightarrow> cf2sfile (Open p f flag fd None # s) f b = cf2sfile s f b"
-apply (frule vd_cons, frule vt_grant_os)
-apply (frule noroot_events, case_tac f, simp)
-apply (auto split:if_splits option.splits    dest!:current_has_sec' dest:parentf_in_current'
-          simp:cf2sfile_def is_file_simps is_dir_simps current_files_simps sectxt_of_obj_simps 
-               get_parentfs_ctxts_simps)
-done
+(**************** cf2sfile event list simpset ****************)
 
-lemma cf2sfile_open_none2:
-  "valid (Open p f flag fd None # s) \<Longrightarrow> cf2sfile (Open p f flag fd None # s) f' b = cf2sfile s f' b"
+lemma cf2sfile_open_none':
+  "valid (Open p f flag fd None # s) \<Longrightarrow> cf2sfile (Open p f flag fd None # s) f'= cf2sfile s f'"
 apply (frule vd_cons, frule vt_grant_os)
 apply (induct f', simp add:cf2sfile_def)
 apply (simp add:cf2sfile_def is_file_simps is_dir_simps current_files_simps sectxt_of_obj_simps 
@@ -184,14 +176,13 @@
 
 lemma cf2sfile_open_none:
   "valid (Open p f flag fd None # s) \<Longrightarrow> cf2sfile (Open p f flag fd None # s) = cf2sfile s"
-apply (rule ext, rule ext)
-apply (simp add:cf2sfile_open_none1 cf2sfile_open_none2)
-done
+apply (rule ext)
+by (simp add:cf2sfile_open_none')
 
 lemma cf2sfile_open_some1:
   "\<lbrakk>valid (Open p f flag fd (Some inum) # s); f' \<in> current_files s\<rbrakk>
    \<Longrightarrow> cf2sfile (Open p f flag fd (Some inum) # s) f' = cf2sfile s f'"
-apply (frule vd_cons, frule vt_grant_os, frule noroot_events, rule ext)
+apply (frule vd_cons, frule vt_grant_os, frule noroot_events)
 apply (case_tac "f = f'", simp)
 apply (induct f', simp add:sroot_only, simp)
 apply (frule parentf_in_current', simp+)
@@ -201,18 +192,18 @@
 
 lemma cf2sfile_open_some2:
   "\<lbrakk>valid (Open p f flag fd (Some inum) # s); is_file s f'\<rbrakk>
-   \<Longrightarrow> cf2sfile (Open p f flag fd (Some inum) # s) f' True = cf2sfile s f' True"
+   \<Longrightarrow> cf2sfile (Open p f flag fd (Some inum) # s) f' = cf2sfile s f'"
 apply (frule vd_cons, drule is_file_in_current)
 by (simp add:cf2sfile_open_some1)
 
 lemma cf2sfile_open_some3:
   "\<lbrakk>valid (Open p f flag fd (Some inum) # s); is_dir s f'\<rbrakk>
-   \<Longrightarrow> cf2sfile (Open p f flag fd (Some inum) # s) f' False = cf2sfile s f' False"
+   \<Longrightarrow> cf2sfile (Open p f flag fd (Some inum) # s) f' = cf2sfile s f'"
 apply (frule vd_cons, drule is_dir_in_current)
 by (simp add:cf2sfile_open_some1)
 
 lemma cf2sfile_open_some4:
-  "valid (Open p f flag fd (Some inum) # s) \<Longrightarrow> cf2sfile (Open p f flag fd (Some inum) # s) f True = (
+  "valid (Open p f flag fd (Some inum) # s) \<Longrightarrow> cf2sfile (Open p f flag fd (Some inum) # s) f = (
      case (parent f) of
        Some pf \<Rightarrow> (case (sectxt_of_obj (Open p f flag fd (Some inum) # s) (O_file f), sectxt_of_obj s (O_dir pf), 
                          get_parentfs_ctxts s pf) of
@@ -228,80 +219,169 @@
 apply (simp add:is_file_in_current)
 done
 
-lemma cf2sfile_open_some5:
-  "valid (Open p f flag fd (Some inum) # s) \<Longrightarrow> 
-   cf2sfile (Open p f flag fd (Some inum) # s) f False = cf2sfile s f False"
-apply (frule vd_cons, frule vt_grant_os, frule noroot_events)
-apply (case_tac f, simp)
-apply (auto simp add:cf2sfile_def is_file_simps is_dir_simps current_files_simps sectxt_of_obj_simps 
-               get_parentfs_ctxts_simps split:option.splits)
-done
-
 lemma cf2sfile_open:
   "\<lbrakk>valid (Open p f flag fd opt # s); f' \<in> current_files (Open p f flag fd opt # s)\<rbrakk>
-   \<Longrightarrow> cf2sfile (Open p f flag fd opt # s) f' b = (
-     if (opt = None) then cf2sfile s f' b
-     else if (f' = f \<and> b) 
+   \<Longrightarrow> cf2sfile (Open p f flag fd opt # s) f' = (
+     if (opt = None) then cf2sfile s f'
+     else if (f' = f) 
      then (case (parent f) of
              Some pf \<Rightarrow> (case (sectxt_of_obj (Open p f flag fd opt # s) (O_file f), sectxt_of_obj s (O_dir pf), 
                  get_parentfs_ctxts s pf) of
                           (Some sec, Some psec, Some asecs) \<Rightarrow> Some (Created, sec, Some psec, set asecs)
                         | _ \<Rightarrow> None)
            | None \<Rightarrow> None)
-     else cf2sfile s f' b)"
+     else cf2sfile s f')"
 apply (case_tac opt)
 apply (simp add:cf2sfile_open_none)
 apply (case_tac "f = f'")
-apply (auto simp:cf2sfile_open_some1 cf2sfile_open_some4 cf2sfile_open_some5 current_files_simps)
+apply (simp add:cf2sfile_open_some4 split:option.splits)
+apply (simp add:cf2sfile_open_some1 current_files_simps)
 done
 
 lemma cf2sfile_mkdir1:
   "\<lbrakk>valid (Mkdir p f i # s); f' \<in> current_files s\<rbrakk>
    \<Longrightarrow> cf2sfile (Mkdir p f i # s) f' = cf2sfile s f'"
-apply (frule vd_cons, frule vt_grant_os, frule noroot_events, rule ext)
+apply (frule vd_cons, frule vt_grant_os, frule noroot_events)
 apply (case_tac "f = f'", simp)
 apply (induct f', simp add:sroot_only, simp)
 apply (frule parentf_in_current', simp+)
-apply clarsimp
-apply (case_tac "f = f'", simp+)
-apply (simp (no_asm_simp) add:cf2sfile_def)
-apply (auto simp add:cf2sfile_def is_file_simps is_dir_simps current_files_simps sectxt_of_obj_simps 
+apply (case_tac "f = f'", simp)
+apply (simp add:cf2sfile_path is_file_simps is_dir_simps current_files_simps sectxt_of_obj_simps 
                get_parentfs_ctxts_simps split:if_splits option.splits)
 done
 
 lemma cf2sfile_mkdir2:
-  "\<lbrakk>valid (Open p f flag fd (Some inum) # s); is_file s f'\<rbrakk>
-   \<Longrightarrow> cf2sfile (Open p f flag fd (Some inum) # s) f' True = cf2sfile s f' True"
+  "\<lbrakk>valid (Mkdir p f i # s); is_file s f'\<rbrakk>
+   \<Longrightarrow> cf2sfile (Mkdir p f i # s) f' = cf2sfile s f'"
 apply (frule vd_cons, drule is_file_in_current)
-by (simp add:cf2sfile_open_some1)
+by (simp add:cf2sfile_mkdir1)
 
 lemma cf2sfile_mkdir3:
-  "\<lbrakk>valid (Open p f flag fd (Some inum) # s); is_dir s f'\<rbrakk>
-   \<Longrightarrow> cf2sfile (Open p f flag fd (Some inum) # s) f' False = cf2sfile s f' False"
+  "\<lbrakk>valid (Mkdir p f i # s); is_dir s f'\<rbrakk>
+   \<Longrightarrow> cf2sfile (Mkdir p f i # s) f' = cf2sfile s f'"
 apply (frule vd_cons, drule is_dir_in_current)
-by (simp add:cf2sfile_open_some1)
+by (simp add:cf2sfile_mkdir1)
 
+lemma cf2sfile_mkdir4:
+  "valid (Mkdir p f i # s)
+  \<Longrightarrow> cf2sfile (Mkdir p f i # s) f = (case (parent f) of
+         Some pf \<Rightarrow> (case (sectxt_of_obj (Mkdir p f i # s) (O_dir f), sectxt_of_obj s (O_dir pf), 
+                           get_parentfs_ctxts s pf) of
+                      (Some sec, Some psec, Some asecs) \<Rightarrow> Some (Created, sec, Some psec, set asecs)
+                    | _ \<Rightarrow> None)
+       | None \<Rightarrow> None)"
+apply (frule vd_cons, frule vt_grant_os, frule noroot_events)
+apply (case_tac f, simp)
+apply (clarsimp simp:os_grant.simps)
+apply (simp add:sectxt_of_obj_simps)
+apply (frule current_proc_has_sec, simp)
+apply (frule is_dir_has_sec, simp)
+apply (frule get_pfs_secs_prop, simp)
+apply (frule is_dir_not_file)
+apply (auto simp add:cf2sfile_def is_file_simps is_dir_simps current_files_simps sectxt_of_obj_simps 
+               get_parentfs_ctxts_simps split:option.splits if_splits 
+            dest:not_deleted_init_dir is_dir_in_current not_deleted_init_file is_file_in_current)
+done
 
 lemma cf2sfile_mkdir:
-  "valid (Mkdir p f i # s)
-  \<Longrightarrow> cf2sfile (Mkdir p f i # s) = (\<lambda> f' b. 
-    if (f' = f \<and> \<not> b) 
+  "\<lbrakk>valid (Mkdir p f i # s); f' \<in> current_files (Mkdir p f i # s)\<rbrakk>
+  \<Longrightarrow> cf2sfile (Mkdir p f i # s) f' = (
+    if (f' = f) 
     then (case (parent f) of
              Some pf \<Rightarrow> (case (sectxt_of_obj (Mkdir p f i # s) (O_dir f), sectxt_of_obj s (O_dir pf), 
                  get_parentfs_ctxts s pf) of
                           (Some sec, Some psec, Some asecs) \<Rightarrow> Some (Created, sec, Some psec, set asecs)
                         | _ \<Rightarrow> None)
            | None \<Rightarrow> None)
-     else cf2sfile s f' b)"
+     else cf2sfile s f')"
+apply (case_tac "f = f'")
+apply (simp add:cf2sfile_mkdir4 split:option.splits)
+apply (simp add:cf2sfile_mkdir1 current_files_simps)
+done
+
+lemma cf2sfile_linkhard1:
+  "\<lbrakk>valid (LinkHard p oldf f # s); f' \<in> current_files s\<rbrakk>
+   \<Longrightarrow> cf2sfile (LinkHard p oldf f# s) f' = cf2sfile s f'"
+apply (frule vd_cons, frule vt_grant_os, frule noroot_events)
+apply (case_tac "f = f'", simp)
+apply (induct f', simp add:sroot_only, simp)
+apply (frule parentf_in_current', simp+)
+apply (simp add:cf2sfile_def is_file_simps is_dir_simps current_files_simps sectxt_of_obj_simps 
+               get_parentfs_ctxts_simps split:if_splits option.splits)
+done
+
+lemma cf2sfile_linkhard2:
+  "\<lbrakk>valid (LinkHard p oldf f # s); is_file s f'\<rbrakk>
+   \<Longrightarrow> cf2sfile (LinkHard p oldf f # s) f' = cf2sfile s f'"
+apply (frule vd_cons, drule is_file_in_current)
+by (simp add:cf2sfile_linkhard1)
+
+lemma cf2sfile_linkhard3:
+  "\<lbrakk>valid (LinkHard p oldf f # s); is_dir s f'\<rbrakk>
+   \<Longrightarrow> cf2sfile (LinkHard p oldf f # s) f' = cf2sfile s f'"
+apply (frule vd_cons, drule is_dir_in_current)
+by (simp add:cf2sfile_linkhard1)
+
+lemma cf2sfile_linkhard4:
+  "valid (LinkHard p oldf f # s)
+  \<Longrightarrow> cf2sfile (LinkHard p oldf f # s) f = (case (parent f) of
+         Some pf \<Rightarrow> (case (sectxt_of_obj (LinkHard p oldf f # s) (O_file f), sectxt_of_obj s (O_dir pf), 
+                           get_parentfs_ctxts s pf) of
+                      (Some sec, Some psec, Some asecs) \<Rightarrow> Some (Created, sec, Some psec, set asecs)
+                    | _ \<Rightarrow> None)
+       | None \<Rightarrow> None)"
+apply (frule vd_cons, frule vt_grant_os, frule noroot_events)
+apply (case_tac f, simp)
+apply (simp add:cf2sfile_def is_file_simps is_dir_simps current_files_simps sectxt_of_obj_simps 
+               get_parentfs_ctxts_simps)
+apply (rule impI, (erule conjE)+)
+apply (drule not_deleted_init_file, simp+)
+apply (simp add:is_file_in_current)
+done
+
+lemma cf2sfile_linkhard:
+  "\<lbrakk>valid (LinkHard p oldf f # s); f' \<in> current_files (LinkHard p oldf f # s)\<rbrakk>
+  \<Longrightarrow> cf2sfile (LinkHard p oldf f # s) f' = (
+    if (f' = f) 
+    then (case (parent f) of
+             Some pf \<Rightarrow> (case (sectxt_of_obj (LinkHard p oldf f # s) (O_file f), sectxt_of_obj s (O_dir pf), 
+                 get_parentfs_ctxts s pf) of
+                          (Some sec, Some psec, Some asecs) \<Rightarrow> Some (Created, sec, Some psec, set asecs)
+                        | _ \<Rightarrow> None)
+           | None \<Rightarrow> None)
+     else cf2sfile s f')"
+apply (case_tac "f = f'")
+apply (simp add:cf2sfile_linkhard4 split:option.splits)
+apply (simp add:cf2sfile_linkhard1 current_files_simps)
+done
+
+lemma cf2sfile_other:
+  "\<lbrakk>ff \<in> current_files s;
+    \<forall> p f flag fd opt. e \<noteq> Open p f flag fd opt;
+    \<forall> p fd. e \<noteq> CloseFd p fd;
+    \<forall> p f. e \<noteq> UnLink p f;
+    \<forall> p f. e \<noteq> Rmdir p f;
+    \<forall> p f i. e \<noteq> Mkdir p f i;
+    \<forall> p f f'. e \<noteq> LinkHard p f f'; 
+    valid (e # s)\<rbrakk> \<Longrightarrow> cf2sfile (e # s) ff = cf2sfile s ff"
 apply (frule vd_cons, frule vt_grant_os)
-apply (rule ext, rule ext)
+apply (induct ff, simp add:sroot_only)
+apply (frule parentf_in_current', simp+, case_tac e)
+apply (auto simp:current_files_simps is_file_simps is_dir_simps sectxt_of_obj_simps cf2sfile_path 
+           split:if_splits option.splits)                     
+done     
 
-apply (auto simp:cf2sfile_def is_file_simps is_dir_simps current_files_simps sectxt_of_obj_simps 
-               get_parentfs_ctxts_simps  split:if_splits option.splits)
+lemma cf2sfile_unlink:
+  "\<lbrakk>valid (UnLink p f # s); f' \<in> current_files (UnLink p f # s)\<rbrakk>
+   \<Longrightarrow> cf2sfile (UnLink p f # s) f' = cf2sfile s f'"
+apply (frule vd_cons, frule vt_grant_os)
+apply (simp add:current_files_simps split:if_splits)
+apply (auto simp:cf2sfile_def sectxt_of_obj_simps get_parentfs_ctxts_simps is_file_simps is_dir_simps
+ split:if_splits option.splits)
 
 
-
-
+lemmas cf2sfile_simps = cf2sfile_open cf2sfile_mkdir cf2sfile_linkhard cf2sfile_other
+  
 
 
 
--- a/Flask.thy	Wed May 15 15:42:46 2013 +0800
+++ b/Flask.thy	Thu May 16 15:18:44 2013 +0800
@@ -294,10 +294,7 @@
      if (proc_fd_of_file \<tau> f = {}) 
      then (inum_of_file \<tau>) (f := None)
      else inum_of_file \<tau>            )" 
-| "inum_of_file (Rmdir p f # \<tau>) = (
-     if (proc_fd_of_file \<tau> f = {}) 
-     then (inum_of_file \<tau>) (f := None)
-     else inum_of_file \<tau>          )" 
+| "inum_of_file (Rmdir p f # \<tau>) = (inum_of_file \<tau>) (f := None)"
 | "inum_of_file (Mkdir p f ino # \<tau>) = (inum_of_file \<tau>) (f:=  Some ino)"
 | "inum_of_file (LinkHard p f\<^isub>1 f\<^isub>2 # \<tau>) = (inum_of_file \<tau>) (f\<^isub>2 := inum_of_file \<tau> f\<^isub>1)"
 (*
@@ -744,7 +741,7 @@
                                        deleted obj s)"
 | "deleted obj (Clone p p' fds shms # s) = ((\<exists> fd \<in> current_proc_fds s p. obj = O_fd p' fd \<and> fd \<notin> fds) \<or> 
                                             deleted obj s)"
-| "deleted obj (UnLink p f # s) = ((obj = O_file f) \<or> deleted obj s)"
+| "deleted obj (UnLink p f # s) = ((proc_fd_of_file s f = {} \<and> obj = O_file f) \<or> deleted obj s)"
 | "deleted obj (Rmdir p f # s)  = ((obj = O_dir  f) \<or> deleted obj s)"
 | "deleted obj (Exit p # s) = ((obj = O_proc p) \<or> (\<exists> fd \<in> current_proc_fds s p. obj = O_fd p fd) \<or> 
                                (\<exists> fd. obj = O_tcp_sock (p, fd) \<and> is_tcp_sock s (p,fd)) \<or>
--- a/Sectxt_prop.thy	Wed May 15 15:42:46 2013 +0800
+++ b/Sectxt_prop.thy	Thu May 16 15:18:44 2013 +0800
@@ -617,11 +617,16 @@
 apply (rule_tac f = "x # pf" in parentf_is_dir)
 by (auto simp:is_dir_def current_files_def split:option.splits t_inode_tag.splits)
 
-lemma get_pfs_secs_prop:
+lemma get_pfs_secs_prop':
   "\<lbrakk>get_parentfs_ctxts s f = None; valid s\<rbrakk> \<Longrightarrow> \<not> is_dir s f"
 apply (induct f)
 by (auto split:option.splits dest:current_has_sec' parentf_is_dir_prop1)
 
+lemma get_pfs_secs_prop:
+  "\<lbrakk>is_dir s f; valid s\<rbrakk> \<Longrightarrow> \<exists> asecs. get_parentfs_ctxts s f = Some asecs"
+using get_pfs_secs_prop'
+by (auto)
+
 lemma get_pfs_secs_open:
   "valid (Open p f flags fd opt # s) \<Longrightarrow> get_parentfs_ctxts (Open p f flags fd opt # s) = get_parentfs_ctxts s"
 apply (frule noroot_events, frule vd_cons, frule vt_grant_os)
@@ -656,7 +661,7 @@
     from p1 os have p5: "f' \<noteq> f"  by (auto simp:is_dir_in_current)
     show ?case using mkdir vd os p4 p5  p1
       by (auto simp:sectxt_of_obj_simps is_dir_simps p3
-              split:option.splits   dest:current_has_sec' get_pfs_secs_prop)
+              split:option.splits   dest:current_has_sec' get_pfs_secs_prop')
   qed
 qed
 
@@ -669,7 +674,7 @@
                | _ \<Rightarrow> None))"
 apply (frule vd_cons, frule vt_grant_os)
 apply (frule noroot_events, case_tac f)
-by (auto split:option.splits dest:current_has_sec' get_pfs_secs_prop get_pfs_secs_mkdir1
+by (auto split:option.splits dest:current_has_sec' get_pfs_secs_prop' get_pfs_secs_mkdir1
           simp:sectxt_of_obj_simps is_dir_simps)
 
 lemmas get_parentfs_ctxts_simps = get_pfs_secs_other get_pfs_secs_mkdir1 get_pfs_secs_mkdir2