Lines 53-58
Link Here
|
53 |
if(LEN & 1) LEN++; \ |
53 |
if(LEN & 1) LEN++; \ |
54 |
CHR = ((unsigned char *) DE) + LEN; \ |
54 |
CHR = ((unsigned char *) DE) + LEN; \ |
55 |
LEN = *((unsigned char *) DE) - LEN; \ |
55 |
LEN = *((unsigned char *) DE) - LEN; \ |
|
|
56 |
if (LEN<0) LEN=0; \ |
56 |
if (ISOFS_SB(inode->i_sb)->s_rock_offset!=-1) \ |
57 |
if (ISOFS_SB(inode->i_sb)->s_rock_offset!=-1) \ |
57 |
{ \ |
58 |
{ \ |
58 |
LEN-=ISOFS_SB(inode->i_sb)->s_rock_offset; \ |
59 |
LEN-=ISOFS_SB(inode->i_sb)->s_rock_offset; \ |
Lines 103-114
Link Here
|
103 |
struct rock_ridge * rr; |
104 |
struct rock_ridge * rr; |
104 |
int sig; |
105 |
int sig; |
105 |
|
106 |
|
106 |
while (len > 1){ /* There may be one byte for padding somewhere */ |
107 |
while (len > 2){ /* There may be one byte for padding somewhere */ |
107 |
rr = (struct rock_ridge *) chr; |
108 |
rr = (struct rock_ridge *) chr; |
108 |
if (rr->len == 0) goto out; /* Something got screwed up here */ |
109 |
if (rr->len < 3) goto out; /* Something got screwed up here */ |
109 |
sig = isonum_721(chr); |
110 |
sig = isonum_721(chr); |
110 |
chr += rr->len; |
111 |
chr += rr->len; |
111 |
len -= rr->len; |
112 |
len -= rr->len; |
|
|
113 |
if (len < 0) goto out; /* corrupted isofs */ |
112 |
|
114 |
|
113 |
switch(sig){ |
115 |
switch(sig){ |
114 |
case SIG('R','R'): |
116 |
case SIG('R','R'): |
Lines 122-127
Link Here
|
122 |
break; |
124 |
break; |
123 |
case SIG('N','M'): |
125 |
case SIG('N','M'): |
124 |
if (truncate) break; |
126 |
if (truncate) break; |
|
|
127 |
if (rr->len < 5) break; |
125 |
/* |
128 |
/* |
126 |
* If the flags are 2 or 4, this indicates '.' or '..'. |
129 |
* If the flags are 2 or 4, this indicates '.' or '..'. |
127 |
* We don't want to do anything with this, because it |
130 |
* We don't want to do anything with this, because it |
Lines 186-197
Link Here
|
186 |
struct rock_ridge * rr; |
189 |
struct rock_ridge * rr; |
187 |
int rootflag; |
190 |
int rootflag; |
188 |
|
191 |
|
189 |
while (len > 1){ /* There may be one byte for padding somewhere */ |
192 |
while (len > 2){ /* There may be one byte for padding somewhere */ |
190 |
rr = (struct rock_ridge *) chr; |
193 |
rr = (struct rock_ridge *) chr; |
191 |
if (rr->len == 0) goto out; /* Something got screwed up here */ |
194 |
if (rr->len < 3) goto out; /* Something got screwed up here */ |
192 |
sig = isonum_721(chr); |
195 |
sig = isonum_721(chr); |
193 |
chr += rr->len; |
196 |
chr += rr->len; |
194 |
len -= rr->len; |
197 |
len -= rr->len; |
|
|
198 |
if (len < 0) goto out; /* corrupted isofs */ |
195 |
|
199 |
|
196 |
switch(sig){ |
200 |
switch(sig){ |
197 |
#ifndef CONFIG_ZISOFS /* No flag for SF or ZF */ |
201 |
#ifndef CONFIG_ZISOFS /* No flag for SF or ZF */ |
Lines 462-468
Link Here
|
462 |
struct rock_ridge *rr; |
466 |
struct rock_ridge *rr; |
463 |
|
467 |
|
464 |
if (!ISOFS_SB(inode->i_sb)->s_rock) |
468 |
if (!ISOFS_SB(inode->i_sb)->s_rock) |
465 |
panic ("Cannot have symlink with high sierra variant of iso filesystem\n"); |
469 |
goto error; |
466 |
|
470 |
|
467 |
block = ei->i_iget5_block; |
471 |
block = ei->i_iget5_block; |
468 |
lock_kernel(); |
472 |
lock_kernel(); |
Lines 487-499
Link Here
|
487 |
SETUP_ROCK_RIDGE(raw_inode, chr, len); |
491 |
SETUP_ROCK_RIDGE(raw_inode, chr, len); |
488 |
|
492 |
|
489 |
repeat: |
493 |
repeat: |
490 |
while (len > 1) { /* There may be one byte for padding somewhere */ |
494 |
while (len > 2) { /* There may be one byte for padding somewhere */ |
491 |
rr = (struct rock_ridge *) chr; |
495 |
rr = (struct rock_ridge *) chr; |
492 |
if (rr->len == 0) |
496 |
if (rr->len < 3) |
493 |
goto out; /* Something got screwed up here */ |
497 |
goto out; /* Something got screwed up here */ |
494 |
sig = isonum_721(chr); |
498 |
sig = isonum_721(chr); |
495 |
chr += rr->len; |
499 |
chr += rr->len; |
496 |
len -= rr->len; |
500 |
len -= rr->len; |
|
|
501 |
if (len < 0) |
502 |
goto out; /* corrupted isofs */ |
497 |
|
503 |
|
498 |
switch (sig) { |
504 |
switch (sig) { |
499 |
case SIG('R', 'R'): |
505 |
case SIG('R', 'R'): |
Lines 543-548
Link Here
|
543 |
fail: |
549 |
fail: |
544 |
brelse(bh); |
550 |
brelse(bh); |
545 |
unlock_kernel(); |
551 |
unlock_kernel(); |
|
|
552 |
error: |
546 |
SetPageError(page); |
553 |
SetPageError(page); |
547 |
kunmap(page); |
554 |
kunmap(page); |
548 |
unlock_page(page); |
555 |
unlock_page(page); |