Dynamic_static.thy
changeset 63 051b0ee98852
child 65 6f9a588bcfc4
equal deleted inserted replaced
62:9fc384154e84 63:051b0ee98852
       
     1 theory Dynamic_static
       
     2 imports Main Flask Static Init_prop Valid_prop Tainted_prop Delete_prop Co2sobj_prop S2ss_prop S2ss_prop2
       
     3 begin
       
     4 
       
     5 context tainting_s begin
       
     6 
       
     7 definition init_ss_eq:: "t_static_state \<Rightarrow> t_static_state \<Rightarrow> bool" (infix "\<doteq>" 100)
       
     8 where
       
     9   "ss \<doteq> ss' \<equiv> ss \<subseteq> ss' \<and> {sobj. is_init_sobj sobj \<and> sobj \<in> ss'} \<subseteq> ss"
       
    10 
       
    11 lemma [simp]: "ss \<doteq> ss"
       
    12 by (auto simp:init_ss_eq_def)
       
    13 
       
    14 definition init_ss_in:: "t_static_state \<Rightarrow> t_static_state set \<Rightarrow> bool" (infix "\<propto>" 101)
       
    15 where
       
    16   "ss \<propto> sss \<equiv> \<exists> ss' \<in> sss. ss \<doteq> ss'"
       
    17 
       
    18 lemma s2ss_included_sobj:
       
    19   "\<lbrakk>alive s obj; co2sobj s obj= Some sobj\<rbrakk> \<Longrightarrow> sobj \<in> (s2ss s)"
       
    20 by (simp add:s2ss_def, rule_tac x = obj in exI, simp)
       
    21 
       
    22 lemma init_ss_in_prop:
       
    23   "\<lbrakk>s2ss s \<propto> static; co2sobj s obj = Some sobj; alive s obj; init_obj_related sobj obj\<rbrakk>
       
    24    \<Longrightarrow> \<exists> ss \<in> static. sobj \<in> ss"
       
    25 apply (simp add:init_ss_in_def init_ss_eq_def)
       
    26 apply (erule bexE, erule conjE)
       
    27 apply (rule_tac x = ss' in bexI, auto dest!:s2ss_included_sobj)
       
    28 done
       
    29 
       
    30 
       
    31 
       
    32 
       
    33 
       
    34 definition enrich:: "t_state \<Rightarrow> t_object set \<Rightarrow> t_state \<Rightarrow> bool"
       
    35 where
       
    36   "enrich s objs s' \<equiv> \<forall> obj \<in> objs. \<exists> obj'. obj' \<notin> objs \<and> alive s' obj \<and> co2sobj s' obj' = co2sobj s' obj"
       
    37 
       
    38 definition reserve:: "t_state \<Rightarrow> t_object set \<Rightarrow> t_state \<Rightarrow> bool"
       
    39 where
       
    40   "reserve s objs s' \<equiv> \<forall> obj. alive s obj \<longrightarrow> alive s' obj \<and> co2sobj s' obj = co2sobj s obj"
       
    41 
       
    42 definition enrichable :: "t_state \<Rightarrow> t_object set \<Rightarrow> bool"
       
    43 where
       
    44   "enrichable s objs \<equiv> \<exists> s'. valid s' \<and> s2ss s' = s2ss s \<and> enrich s objs s' \<and> reserve s objs s'"
       
    45 
       
    46 definition is_created :: "t_state \<Rightarrow> t_object \<Rightarrow> bool"
       
    47 where
       
    48   "is_created s obj \<equiv> init_alive obj \<longrightarrow> deleted obj s"
       
    49 
       
    50 definition is_inited :: "t_state \<Rightarrow> t_object \<Rightarrow> bool"
       
    51 where
       
    52   "is_inited s obj \<equiv> init_alive obj \<and> \<not> deleted obj s"
       
    53 
       
    54 lemma is_inited_eq_not_created:
       
    55   "is_inited s obj = (\<not> is_created s obj)"
       
    56 by (auto simp:is_created_def is_inited_def)
       
    57 
       
    58 (* recorded in our static world *)
       
    59 fun recorded :: "t_object \<Rightarrow> bool"
       
    60 where
       
    61   "recorded (O_proc p)     = True"
       
    62 | "recorded (O_file f)     = True"
       
    63 | "recorded (O_dir  f)     = True"
       
    64 | "recorded (O_node n)     = False" (* cause socket is temperary not considered *)
       
    65 | "recorded (O_shm  h)     = True"
       
    66 | "recorded (O_msgq q)     = True"
       
    67 | "recorded _              = False"
       
    68 
       
    69 
       
    70 
       
    71 
       
    72 
       
    73 
       
    74 lemma d2s_main_execve:
       
    75   "valid (Execve p f fds # s) \<Longrightarrow> s2ss (Execve p f fds # s) \<in> static"
       
    76 apply (frule vd_cons, frule vt_grant_os, clarsimp simp:s2ss_execve)
       
    77 sorry
       
    78 
       
    79 lemma d2s_main:
       
    80   "valid s \<Longrightarrow> s2ss s \<propto> static"
       
    81 apply (induct s, simp add:s2ss_nil_prop init_ss_in_def)
       
    82 apply (rule_tac x = "init_static_state" in bexI, simp, simp add:s_init)
       
    83 apply (frule vd_cons, frule vt_grant_os, simp)
       
    84 apply (case_tac a) 
       
    85 apply (clarsimp simp add:s2ss_execve)
       
    86 apply (rule conjI, rule impI)
       
    87 
       
    88 
       
    89 
       
    90 sorry
       
    91 
       
    92 
       
    93 lemma many_sq_imp_sms:
       
    94   "\<lbrakk>S_msgq (Create, sec, sms) \<in> ss; ss \<in> static\<rbrakk> \<Longrightarrow> \<forall> sm \<in> (set sms). is_many_smsg sm"
       
    95 sorry
       
    96 
       
    97 
       
    98 
       
    99 lemma enrichability: 
       
   100   "\<lbrakk>valid s; \<forall> obj \<in> objs. alive s obj \<and> is_created s obj \<and> recorded obj\<rbrakk>
       
   101    \<Longrightarrow> enrichable s objs"
       
   102 proof (induct s arbitrary:objs)
       
   103   case Nil
       
   104   hence "objs = {}" 
       
   105     apply (auto simp:is_created_def)
       
   106     apply (erule_tac x = x in ballE)
       
   107     apply (auto simp:init_alive_prop)
       
   108     done
       
   109   thus ?case using Nil unfolding enrichable_def enrich_def reserve_def
       
   110     by (rule_tac x = "[]" in exI, auto)
       
   111 next
       
   112   case (Cons e s)
       
   113   hence p1: "\<And> objs. \<forall> obj \<in> objs. alive s obj \<and> is_created s obj \<and> recorded obj \<Longrightarrow> enrichable s objs"
       
   114     and p2: "valid (e # s)" and p3: "\<forall>obj\<in>objs. alive (e # s) obj \<and> is_created (e # s) obj \<and> recorded obj"
       
   115     and os: "os_grant s e" and se: "grant s e" and vd: "valid s"
       
   116     by (auto dest:vt_grant_os vd_cons vt_grant)
       
   117   show ?case sorry (*
       
   118   proof (cases e)
       
   119     case (Execve p f fds)
       
   120     hence p4: "e = Execve p f fds" by simp
       
   121     from p3 have p5: "is_inited s (O_proc p) \<Longrightarrow> (O_proc p) \<notin> objs"
       
   122       by (auto simp:is_created_def is_inited_def p4 elim!:ballE[where x = "O_proc p"])
       
   123     show "enrichable (e # s) objs"
       
   124     proof (case "is_inited s (O_proc p)")
       
   125       apply (simp add:enrichable_def p4)
       
   126 
       
   127       
       
   128   
       
   129     apply auto
       
   130     apply (auto simp:enrichable_def)
       
   131 apply (induct s)
       
   132 
       
   133 
       
   134 
       
   135 done
       
   136 *)
       
   137 qed
       
   138 
       
   139 lemma s2d_main:
       
   140   "ss \<in> static \<Longrightarrow> \<exists> s. valid s \<and> s2ss s = ss"
       
   141 apply (erule static.induct)
       
   142 apply (rule_tac x = "[]" in exI, simp add:s2ss_nil_prop valid.intros)
       
   143 
       
   144 apply (erule exE|erule conjE)+
       
   145 
       
   146 apply (simp add:update_ss_def)
       
   147 
       
   148 sorry
       
   149 
       
   150 
       
   151 end
       
   152 
       
   153 end