if ( permission(inode, MAY_READ, NULL) != 0 ) 
if ( file_permission(filp, MAY_READ) != 0 ) 
int udf_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,	unsigned long arg){	int result = -EINVAL;	if ( permission(inode, MAY_READ, NULL) != 0 )	{		udf_debug("no permission to access inode %lu\n",						inode->i_ino);		return -EPERM;	}	if ( !arg )	{		udf_debug("invalid argument to udf_ioctl\n");		return -EINVAL;	}	switch (cmd)	{		case UDF_GETVOLIDENT:			return copy_to_user((char __user *)arg,				UDF_SB_VOLIDENT(inode->i_sb), 32) ? -EFAULT : 0;		case UDF_RELOCATE_BLOCKS:		{			long old, new;			if (!capable(CAP_SYS_ADMIN)) return -EACCES;			if (get_user(old, (long __user *)arg)) return -EFAULT;			if ((result = udf_relocate_blocks(inode->i_sb,					old, &new)) == 0)				result = put_user(new, (long __user *)arg);			return result;		}		case UDF_GETEASIZE:			result = put_user(UDF_I_LENEATTR(inode), (int __user *)arg);			break;		case UDF_GETEABLOCK:			result = copy_to_user((char __user *)arg, UDF_I_DATA(inode),				UDF_I_LENEATTR(inode)) ? -EFAULT : 0;			break;	}	return result;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/8c744fb83da0771afa04695028e3550b798dad90/file.c/buggy/fs/udf/file.c