git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
netlabel: out of bound access in cipso_v4_validate()
[pandora-kernel.git]
/
include
/
net
/
cipso_ipv4.h
diff --git
a/include/net/cipso_ipv4.h
b/include/net/cipso_ipv4.h
index
a7a683e
..
9078b31
100644
(file)
--- a/
include/net/cipso_ipv4.h
+++ b/
include/net/cipso_ipv4.h
@@
-290,6
+290,7
@@
static inline int cipso_v4_validate(const struct sk_buff *skb,
unsigned char err_offset = 0;
u8 opt_len = opt[1];
u8 opt_iter;
unsigned char err_offset = 0;
u8 opt_len = opt[1];
u8 opt_iter;
+ u8 tag_len;
if (opt_len < 8) {
err_offset = 1;
if (opt_len < 8) {
err_offset = 1;
@@
-302,11
+303,16
@@
static inline int cipso_v4_validate(const struct sk_buff *skb,
}
for (opt_iter = 6; opt_iter < opt_len;) {
}
for (opt_iter = 6; opt_iter < opt_len;) {
- if (opt[opt_iter + 1] > (opt_len - opt_iter)) {
+ if (opt_iter + 1 == opt_len) {
+ err_offset = opt_iter;
+ goto out;
+ }
+ tag_len = opt[opt_iter + 1];
+ if ((tag_len == 0) || (opt[opt_iter + 1] > (opt_len - opt_iter))) {
err_offset = opt_iter + 1;
goto out;
}
err_offset = opt_iter + 1;
goto out;
}
- opt_iter +=
opt[opt_iter + 1]
;
+ opt_iter +=
tag_len
;
}
out:
}
out: