It looks like openat() syscall is failing with EACCESS somewhere in the blkid_get_tag_value(). So get_root() is needed to run this function. Not sure whether it's safe.
lsblk implements a whole internal library to gather info about block devices, it supports multiple data gathering methods (e.g. from udev). So lsblk-way is not applicable here :(