Lines 3424-3429
Link Here
|
3424 |
} |
3424 |
} |
3425 |
|
3425 |
|
3426 |
|
3426 |
|
|
|
3427 |
/* krellan: Linux 2.6.29 compatibility functions for capabilities */ |
3428 |
/* Errors are logged but otherwise ignored */ |
3429 |
|
3430 |
void compat_cap_raise(int cap) |
3431 |
{ |
3432 |
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) |
3433 |
cap_raise(current->cap_effective, cap); |
3434 |
#else |
3435 |
struct cred *new_cred; |
3436 |
|
3437 |
new_cred = prepare_creds(); |
3438 |
if (new_cred != NULL) |
3439 |
{ |
3440 |
cap_raise(new_cred->cap_effective, cap); |
3441 |
commit_creds(new_cred); |
3442 |
} |
3443 |
else |
3444 |
{ |
3445 |
Log("compat_cap_raise(%d) prepare_creds(): Out of memory\n", cap); |
3446 |
} |
3447 |
#endif |
3448 |
} |
3449 |
|
3450 |
void compat_cap_lower(int cap) |
3451 |
{ |
3452 |
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) |
3453 |
cap_lower(current->cap_effective, cap); |
3454 |
#else |
3455 |
struct cred *new_cred; |
3456 |
|
3457 |
new_cred = prepare_creds(); |
3458 |
if (new_cred != NULL) |
3459 |
{ |
3460 |
cap_lower(new_cred->cap_effective, cap); |
3461 |
commit_creds(new_cred); |
3462 |
} |
3463 |
else |
3464 |
{ |
3465 |
Log("compat_cap_lower(%d) prepare_creds(): Out of memory\n", cap); |
3466 |
} |
3467 |
#endif |
3468 |
} |
3469 |
|
3470 |
int compat_cap_raised(int cap) |
3471 |
{ |
3472 |
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) |
3473 |
return cap_raised(current->cap_effective, cap); |
3474 |
#else |
3475 |
return cap_raised(current_cap(), cap); |
3476 |
#endif |
3477 |
} |
3478 |
|
3479 |
int compat_get_fsuid(void) |
3480 |
{ |
3481 |
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) |
3482 |
return current->fsuid; |
3483 |
#else |
3484 |
return current_fsuid(); |
3485 |
#endif |
3486 |
} |
3487 |
|
3488 |
void compat_set_fsuid(int fsuid) |
3489 |
{ |
3490 |
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29) |
3491 |
current->fsuid = fsuid; |
3492 |
#else |
3493 |
struct cred *new_cred; |
3494 |
|
3495 |
new_cred = prepare_creds(); |
3496 |
if (new_cred != NULL) |
3497 |
{ |
3498 |
new_cred->fsuid = fsuid; |
3499 |
commit_creds(new_cred); |
3500 |
} |
3501 |
else |
3502 |
{ |
3503 |
Log("compat_set_fsuid(%d) prepare_creds(): Out of memory\n", fsuid); |
3504 |
} |
3505 |
#endif |
3506 |
} |
3507 |
|
3508 |
|
3427 |
/* |
3509 |
/* |
3428 |
*---------------------------------------------------------------------- |
3510 |
*---------------------------------------------------------------------- |
3429 |
* |
3511 |
* |
Lines 3456-3462
Link Here
|
3456 |
oldFS = get_fs(); |
3538 |
oldFS = get_fs(); |
3457 |
set_fs(KERNEL_DS); |
3539 |
set_fs(KERNEL_DS); |
3458 |
compat_allow_signal(SIGKILL); |
3540 |
compat_allow_signal(SIGKILL); |
3459 |
cap_raise(current->cap_effective, CAP_SYS_RESOURCE); |
3541 |
compat_cap_raise(CAP_SYS_RESOURCE); |
3460 |
compat_set_user_nice(current, linuxState.fastClockPriority); |
3542 |
compat_set_user_nice(current, linuxState.fastClockPriority); |
3461 |
|
3543 |
|
3462 |
while (linuxState.fastClockRate > HZ + HZ/16) { |
3544 |
while (linuxState.fastClockRate > HZ + HZ/16) { |
Lines 3580-3598
Link Here
|
3580 |
Bool cap; |
3662 |
Bool cap; |
3581 |
long pid; |
3663 |
long pid; |
3582 |
|
3664 |
|
3583 |
fsuid = current->fsuid; |
3665 |
fsuid = compat_get_fsuid(); |
3584 |
current->fsuid = 0; |
3666 |
compat_set_fsuid(0); |
3585 |
filp = filp_open("/dev/rtc", O_RDONLY, 0); |
3667 |
filp = filp_open("/dev/rtc", O_RDONLY, 0); |
3586 |
current->fsuid = fsuid; |
3668 |
compat_set_fsuid(fsuid); |
3587 |
if (IS_ERR(filp)) { |
3669 |
if (IS_ERR(filp)) { |
3588 |
Warning("/dev/rtc open failed: %d\n", (int)(VA)filp); |
3670 |
Warning("/dev/rtc open failed: %d\n", (int)(VA)filp); |
3589 |
return -(int)(VA)filp; |
3671 |
return -(int)(VA)filp; |
3590 |
} |
3672 |
} |
3591 |
cap = cap_raised(current->cap_effective, CAP_SYS_RESOURCE); |
3673 |
cap = compat_cap_raised(CAP_SYS_RESOURCE); |
3592 |
cap_raise(current->cap_effective, CAP_SYS_RESOURCE); |
3674 |
compat_cap_raise(CAP_SYS_RESOURCE); |
3593 |
res = HostIFDoIoctl(filp, RTC_PIE_ON, 0); |
3675 |
res = HostIFDoIoctl(filp, RTC_PIE_ON, 0); |
3594 |
if (!cap) { |
3676 |
if (!cap) { |
3595 |
cap_lower(current->cap_effective, CAP_SYS_RESOURCE); |
3677 |
compat_cap_lower(CAP_SYS_RESOURCE); |
3596 |
} |
3678 |
} |
3597 |
if (res < 0) { |
3679 |
if (res < 0) { |
3598 |
Warning("/dev/rtc enable interrupt failed: %d\n", res); |
3680 |
Warning("/dev/rtc enable interrupt failed: %d\n", res); |