diff -up lockdev-scm-2011-10-07/src/lockdev.c.access lockdev-scm-2011-10-07/src/lockdev.c --- lockdev-scm-2011-10-07/src/lockdev.c.access 2011-07-22 09:37:10.000000000 +0200 +++ lockdev-scm-2011-10-07/src/lockdev.c 2013-12-05 11:56:57.836961642 +0100 @@ -95,6 +95,10 @@ * */ +#ifndef _GNU_SOURCE + #define _GNU_SOURCE +#endif + #include #include #include @@ -616,7 +620,10 @@ dev_lock (const char *devname) if ( stat( device, &statbuf) == -1 ) { close_n_return(-errno); } - if ( access( device, W_OK ) == -1 ) { + /* check that the caller has write permission to the device + * to prevent denial-of-service attack by unauthorized users + */ + if ( euidaccess( device, W_OK ) == -1 ) { close_n_return(-errno); } @@ -780,7 +787,10 @@ dev_relock (const char *devname, if ( stat( device, &statbuf) == -1 ) { close_n_return(-errno); } - if ( access( device, W_OK ) == -1 ) { + /* check that the caller has write permission to the device + * to prevent denial-of-service attack by unauthorized users + */ + if ( euidaccess( device, W_OK ) == -1 ) { close_n_return(-errno); } @@ -870,7 +880,10 @@ dev_unlock (const char *devname, if ( stat( device, &statbuf) == -1 ) { close_n_return(-errno); } - if ( access( device, W_OK ) == -1 ) { + /* check that the caller has write permission to the device + * to prevent denial-of-service attack by unauthorized users + */ + if ( euidaccess( device, W_OK ) == -1 ) { close_n_return(-errno); }