diff --git a/libsysio/include/creds.h b/libsysio/include/creds.h
index 90305e1d305f294cb1cc56122d07f7427b97044a..672dfcfedc06edf9b3978fe670670a6c8e164340 100644
--- a/libsysio/include/creds.h
+++ b/libsysio/include/creds.h
@@ -46,6 +46,11 @@
 #ifndef _CREDS_H_
 #define _CREDS_H_
 
+/*
+ * Superuser's UID.
+ */
+#define _SYSIO_ROOT_UID	0
+
 /*
  * Data structure for user credentials
  */
@@ -56,4 +61,12 @@ struct creds {
 	int creds_ngids;
 };
 
+
+#ifdef _SYSIO_ROOT_UID
+/*
+ * Is caller the superuser?
+ */
+#define _sysio_is_root(_crp) \
+	((_crp)->creds_uid == _SYSIO_ROOT_UID)
+#endif
 #endif
diff --git a/libsysio/src/access.c b/libsysio/src/access.c
index 80e8fcd9ed005ea528c5cad7a339ad55ea212153..784de8e31f84b44058daae794ba823651ff4e182 100644
--- a/libsysio/src/access.c
+++ b/libsysio/src/access.c
@@ -99,6 +99,16 @@ _sysio_check_permission(struct pnode *pno, struct creds *crp, int amode)
 	err = -EACCES;					/* assume error */
 	stat = &ino->i_stbuf;
 	do {
+#ifdef _SYSIO_ROOT_UID
+		/*
+		 * Root?
+		 */
+		if (_sysio_is_root(crp)) {
+			err = 0;
+			break;
+		}
+#endif
+
 		/*
 		 * Owner?
 		 */