--- /dev/null
+#!/bin/bash
+
+efivarfs_mount=/sys/firmware/efi/efivars
+test_guid=210be57c-9849-4fc7-a635-e6382d1aec27
+
+check_prereqs()
+{
+       local msg="skip all tests:"
+
+       if [ $UID != 0 ]; then
+               echo $msg must be run as root >&2
+               exit 0
+       fi
+
+       if ! grep -q "^\S\+ $efivarfs_mount efivarfs" /proc/mounts; then
+               echo $msg efivarfs is not mounted on $efivarfs_mount >&2
+               exit 0
+       fi
+}
+
+run_test()
+{
+       local test="$1"
+
+       echo "--------------------"
+       echo "running $test"
+       echo "--------------------"
+
+       if [ "$(type -t $test)" = 'function' ]; then
+               ( $test )
+       else
+               ( ./$test )
+       fi
+
+       if [ $? -ne 0 ]; then
+               echo "  [FAIL]"
+               rc=1
+       else
+               echo "  [PASS]"
+       fi
+}
+
+test_create()
+{
+       local attrs='\x07\x00\x00\x00'
+       local file=$efivarfs_mount/$FUNCNAME-$test_guid
+
+       printf "$attrs\x00" > $file
+
+       if [ ! -e $file ]; then
+               echo "$file couldn't be created" >&2
+               exit 1
+       fi
+
+       if [ $(stat -c %s $file) -ne 5 ]; then
+               echo "$file has invalid size" >&2
+               exit 1
+       fi
+}
+
+test_delete()
+{
+       local attrs='\x07\x00\x00\x00'
+       local file=$efivarfs_mount/$FUNCNAME-$test_guid
+
+       printf "$attrs\x00" > $file
+
+       if [ ! -e $file ]; then
+               echo "$file couldn't be created" >&2
+               exit 1
+       fi
+
+       rm $file
+
+       if [ -e $file ]; then
+               echo "$file couldn't be deleted" >&2
+               exit 1
+       fi
+
+}
+
+# test that we can remove a variable by issuing a write with only
+# attributes specified
+test_zero_size_delete()
+{
+       local attrs='\x07\x00\x00\x00'
+       local file=$efivarfs_mount/$FUNCNAME-$test_guid
+
+       printf "$attrs\x00" > $file
+
+       if [ ! -e $file ]; then
+               echo "$file does not exist" >&2
+               exit 1
+       fi
+
+       printf "$attrs" > $file
+
+       if [ -e $file ]; then
+               echo "$file should have been deleted" >&2
+               exit 1
+       fi
+}
+
+test_open_unlink()
+{
+       local file=$efivarfs_mount/$FUNCNAME-$test_guid
+       ./open-unlink $file
+}
+
+check_prereqs
+
+rc=0
+
+run_test test_create
+run_test test_delete
+run_test test_zero_size_delete
+run_test test_open_unlink
+
+exit $rc
 
--- /dev/null
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+int main(int argc, char **argv)
+{
+       const char *path;
+       char buf[5];
+       int fd, rc;
+
+       if (argc < 2) {
+               fprintf(stderr, "usage: %s <path>\n", argv[0]);
+               return EXIT_FAILURE;
+       }
+
+       path = argv[1];
+
+       /* attributes: EFI_VARIABLE_NON_VOLATILE |
+        *              EFI_VARIABLE_BOOTSERVICE_ACCESS |
+        *              EFI_VARIABLE_RUNTIME_ACCESS
+        */
+       *(uint32_t *)buf = 0x7;
+       buf[4] = 0;
+
+       /* create a test variable */
+       fd = open(path, O_WRONLY | O_CREAT);
+       if (fd < 0) {
+               perror("open(O_WRONLY)");
+               return EXIT_FAILURE;
+       }
+
+       rc = write(fd, buf, sizeof(buf));
+       if (rc != sizeof(buf)) {
+               perror("write");
+               return EXIT_FAILURE;
+       }
+
+       close(fd);
+
+       fd = open(path, O_RDONLY);
+       if (fd < 0) {
+               perror("open");
+               return EXIT_FAILURE;
+       }
+
+       if (unlink(path) < 0) {
+               perror("unlink");
+               return EXIT_FAILURE;
+       }
+
+       rc = read(fd, buf, sizeof(buf));
+       if (rc > 0) {
+               fprintf(stderr, "reading from an unlinked variable "
+                               "shouldn't be possible\n");
+               return EXIT_FAILURE;
+       }
+
+       return EXIT_SUCCESS;
+}