Ward
Ward copied to clipboard
A static analysis tool for C.
Currently permissions are merely names. However, Ward could be made significantly more powerful by extending the permission language with some notion of parameterisation on source program identifiers. To make this...
Consider ```c void foo () { f1 (); if (cond) { f2 (); return; } f3 (); } ``` I haven't looked too closely, but does `CallTree` represent the join...
```haskell simplifyCallTree (Choice a b) = case (simplifyCallTree a, simplifyCallTree b) of (a', Nop) -> a' (Nop, b') -> b' (a', b') -> Choice a' b' ``` This seems wrong...
Take a look at https://github.com/evincarofautumn/Ward/blob/minimal-annotations/src/Check/Permissions.hs#L655 ```haskell let conflicts = HashSet.filter conflicting $ mconcat sites unless (HashSet.null conflicts) $ do record True $ Error pos $ Text.concat $ [ "conflicting information...
At least in the HTML output, it would be nice to output some boring statistics (# of iterations until quiescence, total number of functions scanned, something like that). So that...
In `compiler` mode I have noticed that errors are reported on a single line, greatly compromising legibility. For instance: ``` $ ward gcc --mode=compiler --config=rts/config.ward rts/sm/BlockAlloc.c.ward.graph rts/Capability.c.ward.graph Loading config files......
Using 05b02cf2a617886d5c064648d2ce415aa9043c86 I am seeing some rather concerning behavior when processing callmaps. I am using this configuration file: ``` sm_lock_held "assume the storage manager lock is held"; take_sm_lock "the ability...
I was looking into using Ward to lint GHC's runtime system, starting with simple lock checking. Unfortunately even with only no privileges defined and enabling enforcement for a single file...