









Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Unification-based alias analysis, a method used to determine if two memory locations may alias. The approach involves adding a level of indirection and using weak updates to improve precision and efficiency. The document also covers the use of restrict annotations and the benefits of const inference.
Typology: Study notes
1 / 15
This page cannot be seen from the preview
Don't miss anything!










Lightweight Specifications to Improve Software Quality
CMSC 631, Fall 2003 2
Even after large, extensive testing efforts, commercial
software is shipped riddled with errors ("bugs").
-- PITAC Report to the President, February 24, 1999
-- Bill Gates, January 15, 2002
(highest priority for Microsoft)
Trustworthy Computing is computing that is available,
reliable, and secure as electricity, water services and
telephony....No Trustworthy Computing platform exists
today.
CMSC 631, Fall 2003 3
CMSC 631, Fall 2003 4
put_tty_queue_nolock(c, tty);
spin_lock_irqsave(&tty->read_lock, flags);
spin_unlock_irqrestore(&tty->read_lock, flags);
In a way that...
CMSC 631, Fall 2003 7
const int ANSI C
ptr(tainted char) Security vulnerabilities
int Æ ptr(open FILE)
File operations
CMSC 631, Fall 2003 8
printf("Hello!"); Hello!
printf("Hello, %s!", name); Hello, name!
printf("%s", name);
printf(name);?
CMSC 631, Fall 2003 9
name := <data-from-network>
printf(name); /* Oops */
CMSC 631, Fall 2003 10
int printf(untainted char *fmt, ...)
tainted char *getenv(const char *)
tainted = may be controlled by adversary
untainted = must not be controlled by adversary
CMSC 631, Fall 2003 11
void f(tainted int);
untainted int a;
f(a);
void g(untainted int);
tainted int b;
f(b);
f accepts tainted or
untainted data
Error
g accepts only untainted
data
untainted £ tainted tainted £/ untainted
untainted < tainted
http://www.cs.umd.edu/~jfoster
CMSC 631, Fall 2003 19
a
0
a
1
a
2
a
3
a
4
a
5
a
6
a
6
£ a
1
a
2
£ a
4
a
3
= a
5
a
8
untainted
tainted
a
7
a
CMSC 631, Fall 2003 20
a
0
a
1
a
2
a
3
a
4
a
5
a
6
a
6
£ a
1
a
2
£ a
4
a
3
= a
5
a
8
untainted
tainted
a
7
a
tainted £ a
6
£ a
1
£ a
3
£ a
5
£ a
7
£ untainted
CMSC 631, Fall 2003 21
CMSC 631, Fall 2003 22
Lock x;
lock(x);
...critical section...
unlock(x);
x : locked Lock
x : unlocked Lock
/* x : int / x := ...; / x : int */
/* y : locked Lock / y := ...; / y : unlocked Lock */
CMSC 631, Fall 2003 25
p = &x; *p = ...;
CMSC 631, Fall 2003 26
{ x : t, y : r, z : s, ... }
x := ...;
{ x : t', y : r, z : s, ... }
y := ...;
{ x : t', y : r', z : s, ... }
CMSC 631, Fall 2003 27
{ x : q int, p : ptr(q int), ... }
*p := ...;
{ x : q int, p : ptr(q' int), ... }
CMSC 631, Fall 2003 28
r
s
p = &x;
r
/* require r = s */
*p : ptr
r
(int) x : ptr
r
(int)
*p := ...;
{ r : q' int, h : ptr(r), ... }
{ x : q int,{ r : q int, hp : ptr(q int), ... } : ptr(r), ... }
{ r : t, h : r, n : s, ... }
2
space to represent stores
CMSC 631, Fall 2003 37
e
0
Alloc r : unlocked Lock
e
1
Assign r : locked Lock
check e
1
(r) :
unlocked Lock
Assign h : q t
Assign r : unlocked Lock
check
t
(r) :
locked Lock
t
e
2
green = { r : unlocked Lock }
red = { r : locked Lock }
CMSC 631, Fall 2003 38
e
0
Alloc r : unlocked Lock
e
1
Assign r : locked Lock
check e
1
(r) :
unlocked Lock
Assign h : q t
Assign r : unlocked Lock
check
t
(r) :
locked Lock
t
e
2
green = { r : unlocked Lock }
red = { r : locked Lock }
CMSC 631, Fall 2003 39
e
0
Alloc r : unlocked Lock
e
1
Assign r : locked Lock
check e
1
(r) :
unlocked Lock
Assign h : q t
Assign r : unlocked Lock
check
t
(r) :
locked Lock
t
e
2
green = { r : unlocked Lock }
red = { r : locked Lock }
CMSC 631, Fall 2003 40
e
0
Alloc r : unlocked Lock
e
1
Assign r : locked Lock
check e
1
(r) :
unlocked Lock
Assign h : q t
Assign r : unlocked Lock
check
t
(r) :
locked Lock
t
e
2
green = { r : unlocked Lock }
red = { r : locked Lock }
e
0
Alloc r : unlocked Lock
e
1
Assign r : locked Lock
check e
1
(r) :
unlocked Lock
Assign h : q t
Assign r : unlocked Lock
check
t
(r) :
locked Lock
t
e
2
green = { r : unlocked Lock }
red = { r : locked Lock }
e
0
Alloc r : unlocked Lock
e
1
Assign r : locked Lock
check e
1
(r) :
unlocked Lock
Assign h : q t
Assign r : unlocked Lock
check
t
(r) :
locked Lock
t
e
2
green = { r : unlocked Lock }
red = { r : locked Lock }
CMSC 631, Fall 2003 43
e
0
Alloc r : unlocked Lock
e
1
Assign r : locked Lock
check e
1
(r) :
unlocked Lock
Assign h : q t
Assign r : unlocked Lock
check
t
(r) :
locked Lock
t
e
2
green = { r : unlocked Lock }
red = { r : locked Lock }
CMSC 631, Fall 2003 44
e
0
Alloc r : unlocked Lock
e
1
Assign r : locked Lock
check e
1
(r) :
unlocked Lock
Assign h : q t
Assign r : unlocked Lock
check
t
(r) :
locked Lock
t
e
2
green = { r : unlocked Lock }
red = { r : locked Lock }
CMSC 631, Fall 2003 45
e
0
Alloc r : unlocked Lock
e
1
Assign r : locked Lock
check e
1
(r) :
unlocked Lock
Assign h : q t
Assign r : unlocked Lock
check
t
(r) :
locked Lock
t
e
2
green = { r : unlocked Lock }
red = { r : locked Lock }
CMSC 631, Fall 2003 46
e
0
Alloc r : unlocked Lock
e
1
Assign r : locked Lock
check e
1
(r) :
unlocked Lock
Assign h : q t
Assign r : unlocked Lock
check
t
(r) :
locked Lock
t
e
2
green = { r : unlocked Lock }
red = { r : locked Lock }
2
, location r has
qualifier q'
e
0
Alloc r : q int
Assign r : q' int
e
2
e
1
e
0
Alloc r : q int
Assign r : q' int
e
2
e
1
Alloc r : q int
2
, location r has
qualifier q + q'
old qualifiers
CMSC 631, Fall 2003 55
void foo(int i) {
do_with_lock(locks[i]);
void do_with_lock(lock *restrict l) {
spin_lock(l);
work();
spin_unlock(l);
CMSC 631, Fall 2003 56
void foo(int i) {
do_with_lock(locks[i]);
void do_with_lock(lock *restrict l) {
spin_lock(l);
work();
spin_unlock(l);
r unlocked
r
CMSC 631, Fall 2003 57
void foo(int i) {
do_with_lock(locks[i]);
void do_with_lock(lock *restrict l) {
spin_lock(l);
work();
spin_unlock(l);
r unlocked
copy r to h
r
h
CMSC 631, Fall 2003 58
void foo(int i) {
do_with_lock(locks[i]);
void do_with_lock(lock *restrict l) {
spin_lock(l);
work();
spin_unlock(l);
r unlocked
copy r to h
r
h
void foo(int i) {
do_with_lock(locks[i]);
void do_with_lock(lock *restrict l) {
spin_lock(l);
work();
spin_unlock(l);
r unlocked
copy r to h
h locked
strong update
r
h
void foo(int i) {
do_with_lock(locks[i]);
void do_with_lock(lock *restrict l) {
spin_lock(l);
work();
spin_unlock(l);
r unlocked
h unlocked
copy r to h
h locked
r
h
CMSC 631, Fall 2003 61
void foo(int i) {
do_with_lock(locks[i]);
void do_with_lock(lock *restrict l) {
spin_lock(l);
work();
spin_unlock(l);
r unlocked
h unlocked
copy r to h
copy h to r
h locked
r
h
CMSC 631, Fall 2003 62
void foo(int i) {
do_with_lock(locks[i]);
void do_with_lock(lock *restrict l) {
spin_lock(l);
work();
spin_unlock(l);
r unlocked
h unlocked
copy r to h
copy h to r
h locked
r
h
CMSC 631, Fall 2003 63
void foo(int i) {
do_with_lock(locks[i]);
void do_with_lock(lock *restrict l) {
spin_lock(l);
work();
spin_unlock(l);
r unlocked
h unlocked
copy r to h
copy h to r
h locked
r
h
r unlocked
CMSC 631, Fall 2003 64
t ::= ...| ref
r
(t) pointer to abstract loc r
L ::= Ø | {r} | L1 » L2 | L1 « L
A | e : ref
r
(t); L
A | *e : t; L » {r}
used to access *x
CMSC 631, Fall 2003 73
CMSC 631, Fall 2003 75
restrict annotations
Flow-insensitive
Type qualifiers
Alias Analysis
Effect inference
Flow-sensitive
Linearity inference
Type qualifiers
CMSC 631, Fall 2003 76
0%
20%
40%
60%
80%
100%
woman-3.0a
patch-2.
m4-1.
diffutils-2.
ssh-1.2.
uucp-1.
Neither
Poly
Mono
Declared
CMSC 631, Fall 2003 79
aliasing for 64
CMSC 631, Fall 2003 80
CMSC 631, Fall 2003 81
No type errors No type errors
because of weak updates
Potential
improvement
589 total
modules
CMSC 631, Fall 2003 82
0
10
20
30
40
50
60
70
80
90
0K 100K 200K 300K 400K 500K 600K 700K 800K
Lines of code (preprocessed)
Running time (s)
Flow-Sensitive Flow-Insensitive Parsing