Suse speedily fixed the infamous O_PATH problem in their current release.
Install description:
1. Make sure you have the 'desktop' kernel. The download paths and
instructions are for the Suse desktop kernel, other kernel types must
replace the string 'desktop' to whatever flavor they use.
2. Download kernel rpms from
[http://download.opensuse.org/repositories/Kernel:/openSUSE-12.1/standard/x86_64/]:
wget
'http://download.opensuse.org/repositories/Kernel:/openSUSE-12.1/standard/x86_64/kernel-desktop-3.1.10-56.1.x86_64.rpm'
wget
'http://download.opensuse.org/repositories/Kernel:/openSUSE-12.1/standard/x86_64/kernel-desktop-base-3.1.10-56.1.x86_64.rpm'
wget
'http://download.opensuse.org/repositories/Kernel:/openSUSE-12.1/standard/x86_64/kernel-desktop-devel-3.1.10-56.1.x86_64.rpm'
3. Install new kernel:
rpm -i --force kernel-desktop-3.1.10-56.1.x86_64.rpm
rpm -i --force kernel-desktop-base-3.1.10-56.1.x86_64.rpm
rpm -i --force --nodeps kernel-desktop-devel-3.1.10-56.1.x86_64.rpm
4. Reboot. Grub splash screen now has the new kernel at the top, the
old still remains as fallback alternative
5. Test, using Olga Kryzhanovskas test:
--------------------------------------------
#define _GNU_SOURCE 1 // MUST be used or headers won't define O_PATH!!
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main(int ac, char *av[])
{
int dirfd, dupdirfd;
dirfd=open("/etc", O_PATH);
if(dirfd<0)
{
fprintf(stderr, "open() failed.\n");
return EXIT_FAILURE;
}
dupdirfd = fcntl(dirfd, F_DUPFD, 50);
if(dirfd<0)
{
fprintf(stderr, "fcntl() failed.\n");
return EXIT_FAILURE;
}
if(fchdir(dupdirfd)<0)
{
fprintf(stderr, "fchdir(dupdirfd) failed.\n");
return EXIT_FAILURE;
}
if(fchdir(dirfd)<0)
{
fprintf(stderr, "fchdir(dirfd) failed.\n");
return EXIT_FAILURE;
}
if(openat(dupdirfd, "profile", O_RDONLY)<0)
{
fprintf(stderr, "openat(dupdirfd, profile, O_RDONLY)
failed.\n");
return EXIT_FAILURE;
}
dirfd=openat(dupdirfd, "X11", O_PATH);
if(dirfd<0)
{
fprintf(stderr, "openat(dupdirfd, X11, O_PATH) failed.\n");
return EXIT_FAILURE;
}
if(fchdir(dirfd)<0)
{
fprintf(stderr, "2nd fchdir(dirfd) failed.\n");
return EXIT_FAILURE;
}
puts("SUCCESS.");
return EXIT_SUCCESS;
}
--------------------------------------------
Credits for lots of help, instructions and enduring my nagging go to
Neil Brown from Suse :-)
Thank you!
Neil, installing kernel-desktop-devel-3.1.10-56.1.x86_64.rpm required
a --nodeps. Is that a bug?
Josh
_______________________________________________
ast-developers mailing list
[email protected]
https://mailman.research.att.com/mailman/listinfo/ast-developers