Prevent reading of inode generation for special files

Kernel API does not support at the momement reading of
generation number of special files, so do not do it.

Signed-off-by: Dmitry Kasatkin <d.kasatkin@samsung.com>
This commit is contained in:
Dmitry Kasatkin 2014-01-17 11:27:16 +02:00
parent 05017f3e98
commit fd08fdeeb5

View File

@ -730,8 +730,8 @@ static int get_uuid(struct stat *st, char *uuid)
static int calc_evm_hash(const char *file, unsigned char *hash)
{
struct stat st;
int fd, err;
uint32_t generation;
int err;
uint32_t generation = 0;
EVP_MD_CTX ctx;
unsigned int mdlen;
char **xattrname;
@ -740,24 +740,26 @@ static int calc_evm_hash(const char *file, unsigned char *hash)
ssize_t list_size;
char uuid[16];
fd = open(file, 0);
if (fd < 0) {
log_err("Unable to open %s\n", file);
if (lstat(file, &st)) {
log_err("lstat() failed\n");
return -1;
}
if (fstat(fd, &st)) {
log_err("fstat() failed\n");
return -1;
if (S_ISREG(st.st_mode) || S_ISDIR(st.st_mode)) {
/* we cannot at the momement to get generation of special files..
* kernel API does not support it */
int fd = open(file, 0);
if (fd < 0) {
log_err("Unable to open %s\n", file);
return -1;
}
if (ioctl(fd, EXT34_IOC_GETVERSION, &generation)) {
log_err("ioctl() failed\n");
return -1;
}
close(fd);
}
if (ioctl(fd, EXT34_IOC_GETVERSION, &generation)) {
log_err("ioctl() failed\n");
return -1;
}
close(fd);
log_info("generation: %u\n", generation);
list_size = llistxattr(file, list, sizeof(list));