Linux Audio

Check our new training course

Loading...
v5.14.15
   1/*
   2 * super.c
   3 *
   4 * PURPOSE
   5 *  Super block routines for the OSTA-UDF(tm) filesystem.
   6 *
   7 * DESCRIPTION
   8 *  OSTA-UDF(tm) = Optical Storage Technology Association
   9 *  Universal Disk Format.
  10 *
  11 *  This code is based on version 2.00 of the UDF specification,
  12 *  and revision 3 of the ECMA 167 standard [equivalent to ISO 13346].
  13 *    http://www.osta.org/
  14 *    https://www.ecma.ch/
  15 *    https://www.iso.org/
  16 *
  17 * COPYRIGHT
  18 *  This file is distributed under the terms of the GNU General Public
  19 *  License (GPL). Copies of the GPL can be obtained from:
  20 *    ftp://prep.ai.mit.edu/pub/gnu/GPL
  21 *  Each contributing author retains all rights to their own work.
  22 *
  23 *  (C) 1998 Dave Boynton
  24 *  (C) 1998-2004 Ben Fennema
  25 *  (C) 2000 Stelias Computing Inc
  26 *
  27 * HISTORY
  28 *
  29 *  09/24/98 dgb  changed to allow compiling outside of kernel, and
  30 *                added some debugging.
  31 *  10/01/98 dgb  updated to allow (some) possibility of compiling w/2.0.34
  32 *  10/16/98      attempting some multi-session support
  33 *  10/17/98      added freespace count for "df"
  34 *  11/11/98 gr   added novrs option
  35 *  11/26/98 dgb  added fileset,anchor mount options
  36 *  12/06/98 blf  really hosed things royally. vat/sparing support. sequenced
  37 *                vol descs. rewrote option handling based on isofs
  38 *  12/20/98      find the free space bitmap (if it exists)
  39 */
  40
  41#include "udfdecl.h"
  42
  43#include <linux/blkdev.h>
  44#include <linux/slab.h>
  45#include <linux/kernel.h>
  46#include <linux/module.h>
  47#include <linux/parser.h>
  48#include <linux/stat.h>
  49#include <linux/cdrom.h>
  50#include <linux/nls.h>
  51#include <linux/vfs.h>
  52#include <linux/vmalloc.h>
  53#include <linux/errno.h>
  54#include <linux/mount.h>
  55#include <linux/seq_file.h>
  56#include <linux/bitmap.h>
  57#include <linux/crc-itu-t.h>
  58#include <linux/log2.h>
  59#include <asm/byteorder.h>
  60
  61#include "udf_sb.h"
  62#include "udf_i.h"
  63
  64#include <linux/init.h>
  65#include <linux/uaccess.h>
  66
  67enum {
  68	VDS_POS_PRIMARY_VOL_DESC,
  69	VDS_POS_UNALLOC_SPACE_DESC,
  70	VDS_POS_LOGICAL_VOL_DESC,
  71	VDS_POS_IMP_USE_VOL_DESC,
  72	VDS_POS_LENGTH
  73};
 
 
 
  74
  75#define VSD_FIRST_SECTOR_OFFSET		32768
  76#define VSD_MAX_SECTOR_OFFSET		0x800000
  77
  78/*
  79 * Maximum number of Terminating Descriptor / Logical Volume Integrity
  80 * Descriptor redirections. The chosen numbers are arbitrary - just that we
  81 * hopefully don't limit any real use of rewritten inode on write-once media
  82 * but avoid looping for too long on corrupted media.
  83 */
  84#define UDF_MAX_TD_NESTING 64
  85#define UDF_MAX_LVID_NESTING 1000
  86
  87enum { UDF_MAX_LINKS = 0xffff };
  88
  89/* These are the "meat" - everything else is stuffing */
  90static int udf_fill_super(struct super_block *, void *, int);
  91static void udf_put_super(struct super_block *);
  92static int udf_sync_fs(struct super_block *, int);
  93static int udf_remount_fs(struct super_block *, int *, char *);
  94static void udf_load_logicalvolint(struct super_block *, struct kernel_extent_ad);
 
 
 
 
  95static void udf_open_lvid(struct super_block *);
  96static void udf_close_lvid(struct super_block *);
  97static unsigned int udf_count_free(struct super_block *);
  98static int udf_statfs(struct dentry *, struct kstatfs *);
  99static int udf_show_options(struct seq_file *, struct dentry *);
 100
 101struct logicalVolIntegrityDescImpUse *udf_sb_lvidiu(struct super_block *sb)
 102{
 103	struct logicalVolIntegrityDesc *lvid;
 104	unsigned int partnum;
 105	unsigned int offset;
 106
 107	if (!UDF_SB(sb)->s_lvid_bh)
 108		return NULL;
 109	lvid = (struct logicalVolIntegrityDesc *)UDF_SB(sb)->s_lvid_bh->b_data;
 110	partnum = le32_to_cpu(lvid->numOfPartitions);
 
 
 
 
 
 
 
 111	/* The offset is to skip freeSpaceTable and sizeTable arrays */
 112	offset = partnum * 2 * sizeof(uint32_t);
 113	return (struct logicalVolIntegrityDescImpUse *)
 114					(((uint8_t *)(lvid + 1)) + offset);
 115}
 116
 117/* UDF filesystem type */
 118static struct dentry *udf_mount(struct file_system_type *fs_type,
 119		      int flags, const char *dev_name, void *data)
 120{
 121	return mount_bdev(fs_type, flags, dev_name, data, udf_fill_super);
 122}
 123
 124static struct file_system_type udf_fstype = {
 125	.owner		= THIS_MODULE,
 126	.name		= "udf",
 127	.mount		= udf_mount,
 128	.kill_sb	= kill_block_super,
 129	.fs_flags	= FS_REQUIRES_DEV,
 130};
 131MODULE_ALIAS_FS("udf");
 132
 133static struct kmem_cache *udf_inode_cachep;
 134
 135static struct inode *udf_alloc_inode(struct super_block *sb)
 136{
 137	struct udf_inode_info *ei;
 138	ei = kmem_cache_alloc(udf_inode_cachep, GFP_KERNEL);
 139	if (!ei)
 140		return NULL;
 141
 142	ei->i_unique = 0;
 143	ei->i_lenExtents = 0;
 144	ei->i_lenStreams = 0;
 145	ei->i_next_alloc_block = 0;
 146	ei->i_next_alloc_goal = 0;
 147	ei->i_strat4096 = 0;
 148	ei->i_streamdir = 0;
 149	init_rwsem(&ei->i_data_sem);
 150	ei->cached_extent.lstart = -1;
 151	spin_lock_init(&ei->i_extent_cache_lock);
 152
 153	return &ei->vfs_inode;
 154}
 155
 156static void udf_free_in_core_inode(struct inode *inode)
 157{
 
 158	kmem_cache_free(udf_inode_cachep, UDF_I(inode));
 159}
 160
 
 
 
 
 
 161static void init_once(void *foo)
 162{
 163	struct udf_inode_info *ei = (struct udf_inode_info *)foo;
 164
 165	ei->i_data = NULL;
 166	inode_init_once(&ei->vfs_inode);
 167}
 168
 169static int __init init_inodecache(void)
 170{
 171	udf_inode_cachep = kmem_cache_create("udf_inode_cache",
 172					     sizeof(struct udf_inode_info),
 173					     0, (SLAB_RECLAIM_ACCOUNT |
 174						 SLAB_MEM_SPREAD |
 175						 SLAB_ACCOUNT),
 176					     init_once);
 177	if (!udf_inode_cachep)
 178		return -ENOMEM;
 179	return 0;
 180}
 181
 182static void destroy_inodecache(void)
 183{
 184	/*
 185	 * Make sure all delayed rcu free inodes are flushed before we
 186	 * destroy cache.
 187	 */
 188	rcu_barrier();
 189	kmem_cache_destroy(udf_inode_cachep);
 190}
 191
 192/* Superblock operations */
 193static const struct super_operations udf_sb_ops = {
 194	.alloc_inode	= udf_alloc_inode,
 195	.free_inode	= udf_free_in_core_inode,
 196	.write_inode	= udf_write_inode,
 197	.evict_inode	= udf_evict_inode,
 198	.put_super	= udf_put_super,
 199	.sync_fs	= udf_sync_fs,
 200	.statfs		= udf_statfs,
 201	.remount_fs	= udf_remount_fs,
 202	.show_options	= udf_show_options,
 203};
 204
 205struct udf_options {
 206	unsigned char novrs;
 207	unsigned int blocksize;
 208	unsigned int session;
 209	unsigned int lastblock;
 210	unsigned int anchor;
 
 
 
 
 211	unsigned int flags;
 212	umode_t umask;
 213	kgid_t gid;
 214	kuid_t uid;
 215	umode_t fmode;
 216	umode_t dmode;
 217	struct nls_table *nls_map;
 218};
 219
 220static int __init init_udf_fs(void)
 221{
 222	int err;
 223
 224	err = init_inodecache();
 225	if (err)
 226		goto out1;
 227	err = register_filesystem(&udf_fstype);
 228	if (err)
 229		goto out;
 230
 231	return 0;
 232
 233out:
 234	destroy_inodecache();
 235
 236out1:
 237	return err;
 238}
 239
 240static void __exit exit_udf_fs(void)
 241{
 242	unregister_filesystem(&udf_fstype);
 243	destroy_inodecache();
 244}
 245
 
 
 
 246static int udf_sb_alloc_partition_maps(struct super_block *sb, u32 count)
 247{
 248	struct udf_sb_info *sbi = UDF_SB(sb);
 249
 250	sbi->s_partmaps = kcalloc(count, sizeof(*sbi->s_partmaps), GFP_KERNEL);
 
 251	if (!sbi->s_partmaps) {
 
 
 252		sbi->s_partitions = 0;
 253		return -ENOMEM;
 254	}
 255
 256	sbi->s_partitions = count;
 257	return 0;
 258}
 259
 260static void udf_sb_free_bitmap(struct udf_bitmap *bitmap)
 261{
 262	int i;
 263	int nr_groups = bitmap->s_nr_groups;
 264
 265	for (i = 0; i < nr_groups; i++)
 266		brelse(bitmap->s_block_bitmap[i]);
 
 267
 268	kvfree(bitmap);
 269}
 270
 271static void udf_free_partition(struct udf_part_map *map)
 272{
 273	int i;
 274	struct udf_meta_data *mdata;
 275
 276	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE)
 277		iput(map->s_uspace.s_table);
 
 
 278	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP)
 279		udf_sb_free_bitmap(map->s_uspace.s_bitmap);
 
 
 280	if (map->s_partition_type == UDF_SPARABLE_MAP15)
 281		for (i = 0; i < 4; i++)
 282			brelse(map->s_type_specific.s_sparing.s_spar_map[i]);
 283	else if (map->s_partition_type == UDF_METADATA_MAP25) {
 284		mdata = &map->s_type_specific.s_metadata;
 285		iput(mdata->s_metadata_fe);
 286		mdata->s_metadata_fe = NULL;
 287
 288		iput(mdata->s_mirror_fe);
 289		mdata->s_mirror_fe = NULL;
 290
 291		iput(mdata->s_bitmap_fe);
 292		mdata->s_bitmap_fe = NULL;
 293	}
 294}
 295
 296static void udf_sb_free_partitions(struct super_block *sb)
 297{
 298	struct udf_sb_info *sbi = UDF_SB(sb);
 299	int i;
 300
 301	if (!sbi->s_partmaps)
 302		return;
 303	for (i = 0; i < sbi->s_partitions; i++)
 304		udf_free_partition(&sbi->s_partmaps[i]);
 305	kfree(sbi->s_partmaps);
 306	sbi->s_partmaps = NULL;
 307}
 308
 309static int udf_show_options(struct seq_file *seq, struct dentry *root)
 310{
 311	struct super_block *sb = root->d_sb;
 312	struct udf_sb_info *sbi = UDF_SB(sb);
 313
 314	if (!UDF_QUERY_FLAG(sb, UDF_FLAG_STRICT))
 315		seq_puts(seq, ",nostrict");
 316	if (UDF_QUERY_FLAG(sb, UDF_FLAG_BLOCKSIZE_SET))
 317		seq_printf(seq, ",bs=%lu", sb->s_blocksize);
 318	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UNHIDE))
 319		seq_puts(seq, ",unhide");
 320	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UNDELETE))
 321		seq_puts(seq, ",undelete");
 322	if (!UDF_QUERY_FLAG(sb, UDF_FLAG_USE_AD_IN_ICB))
 323		seq_puts(seq, ",noadinicb");
 324	if (UDF_QUERY_FLAG(sb, UDF_FLAG_USE_SHORT_AD))
 325		seq_puts(seq, ",shortad");
 326	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UID_FORGET))
 327		seq_puts(seq, ",uid=forget");
 
 
 328	if (UDF_QUERY_FLAG(sb, UDF_FLAG_GID_FORGET))
 329		seq_puts(seq, ",gid=forget");
 
 
 330	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UID_SET))
 331		seq_printf(seq, ",uid=%u", from_kuid(&init_user_ns, sbi->s_uid));
 332	if (UDF_QUERY_FLAG(sb, UDF_FLAG_GID_SET))
 333		seq_printf(seq, ",gid=%u", from_kgid(&init_user_ns, sbi->s_gid));
 334	if (sbi->s_umask != 0)
 335		seq_printf(seq, ",umask=%ho", sbi->s_umask);
 336	if (sbi->s_fmode != UDF_INVALID_MODE)
 337		seq_printf(seq, ",mode=%ho", sbi->s_fmode);
 338	if (sbi->s_dmode != UDF_INVALID_MODE)
 339		seq_printf(seq, ",dmode=%ho", sbi->s_dmode);
 340	if (UDF_QUERY_FLAG(sb, UDF_FLAG_SESSION_SET))
 341		seq_printf(seq, ",session=%d", sbi->s_session);
 342	if (UDF_QUERY_FLAG(sb, UDF_FLAG_LASTBLOCK_SET))
 343		seq_printf(seq, ",lastblock=%u", sbi->s_last_block);
 344	if (sbi->s_anchor != 0)
 345		seq_printf(seq, ",anchor=%u", sbi->s_anchor);
 346	if (sbi->s_nls_map)
 
 
 
 
 
 
 347		seq_printf(seq, ",iocharset=%s", sbi->s_nls_map->charset);
 348	else
 349		seq_puts(seq, ",iocharset=utf8");
 350
 351	return 0;
 352}
 353
 354/*
 355 * udf_parse_options
 356 *
 357 * PURPOSE
 358 *	Parse mount options.
 359 *
 360 * DESCRIPTION
 361 *	The following mount options are supported:
 362 *
 363 *	gid=		Set the default group.
 364 *	umask=		Set the default umask.
 365 *	mode=		Set the default file permissions.
 366 *	dmode=		Set the default directory permissions.
 367 *	uid=		Set the default user.
 368 *	bs=		Set the block size.
 369 *	unhide		Show otherwise hidden files.
 370 *	undelete	Show deleted files in lists.
 371 *	adinicb		Embed data in the inode (default)
 372 *	noadinicb	Don't embed data in the inode
 373 *	shortad		Use short ad's
 374 *	longad		Use long ad's (default)
 375 *	nostrict	Unset strict conformance
 376 *	iocharset=	Set the NLS character set
 377 *
 378 *	The remaining are for debugging and disaster recovery:
 379 *
 380 *	novrs		Skip volume sequence recognition
 381 *
 382 *	The following expect a offset from 0.
 383 *
 384 *	session=	Set the CDROM session (default= last session)
 385 *	anchor=		Override standard anchor location. (default= 256)
 386 *	volume=		Override the VolumeDesc location. (unused)
 387 *	partition=	Override the PartitionDesc location. (unused)
 388 *	lastblock=	Set the last block of the filesystem/
 389 *
 390 *	The following expect a offset from the partition root.
 391 *
 392 *	fileset=	Override the fileset block location. (unused)
 393 *	rootdir=	Override the root directory location. (unused)
 394 *		WARNING: overriding the rootdir to a non-directory may
 395 *		yield highly unpredictable results.
 396 *
 397 * PRE-CONDITIONS
 398 *	options		Pointer to mount options string.
 399 *	uopts		Pointer to mount options variable.
 400 *
 401 * POST-CONDITIONS
 402 *	<return>	1	Mount options parsed okay.
 403 *	<return>	0	Error parsing mount options.
 404 *
 405 * HISTORY
 406 *	July 1, 1997 - Andrew E. Mileski
 407 *	Written, tested, and released.
 408 */
 409
 410enum {
 411	Opt_novrs, Opt_nostrict, Opt_bs, Opt_unhide, Opt_undelete,
 412	Opt_noadinicb, Opt_adinicb, Opt_shortad, Opt_longad,
 413	Opt_gid, Opt_uid, Opt_umask, Opt_session, Opt_lastblock,
 414	Opt_anchor, Opt_volume, Opt_partition, Opt_fileset,
 415	Opt_rootdir, Opt_utf8, Opt_iocharset,
 416	Opt_err, Opt_uforget, Opt_uignore, Opt_gforget, Opt_gignore,
 417	Opt_fmode, Opt_dmode
 418};
 419
 420static const match_table_t tokens = {
 421	{Opt_novrs,	"novrs"},
 422	{Opt_nostrict,	"nostrict"},
 423	{Opt_bs,	"bs=%u"},
 424	{Opt_unhide,	"unhide"},
 425	{Opt_undelete,	"undelete"},
 426	{Opt_noadinicb,	"noadinicb"},
 427	{Opt_adinicb,	"adinicb"},
 428	{Opt_shortad,	"shortad"},
 429	{Opt_longad,	"longad"},
 430	{Opt_uforget,	"uid=forget"},
 431	{Opt_uignore,	"uid=ignore"},
 432	{Opt_gforget,	"gid=forget"},
 433	{Opt_gignore,	"gid=ignore"},
 434	{Opt_gid,	"gid=%u"},
 435	{Opt_uid,	"uid=%u"},
 436	{Opt_umask,	"umask=%o"},
 437	{Opt_session,	"session=%u"},
 438	{Opt_lastblock,	"lastblock=%u"},
 439	{Opt_anchor,	"anchor=%u"},
 440	{Opt_volume,	"volume=%u"},
 441	{Opt_partition,	"partition=%u"},
 442	{Opt_fileset,	"fileset=%u"},
 443	{Opt_rootdir,	"rootdir=%u"},
 444	{Opt_utf8,	"utf8"},
 445	{Opt_iocharset,	"iocharset=%s"},
 446	{Opt_fmode,     "mode=%o"},
 447	{Opt_dmode,     "dmode=%o"},
 448	{Opt_err,	NULL}
 449};
 450
 451static int udf_parse_options(char *options, struct udf_options *uopt,
 452			     bool remount)
 453{
 454	char *p;
 455	int option;
 456	unsigned int uv;
 457
 458	uopt->novrs = 0;
 
 459	uopt->session = 0xFFFFFFFF;
 460	uopt->lastblock = 0;
 461	uopt->anchor = 0;
 
 
 
 
 462
 463	if (!options)
 464		return 1;
 465
 466	while ((p = strsep(&options, ",")) != NULL) {
 467		substring_t args[MAX_OPT_ARGS];
 468		int token;
 469		unsigned n;
 470		if (!*p)
 471			continue;
 472
 473		token = match_token(p, tokens, args);
 474		switch (token) {
 475		case Opt_novrs:
 476			uopt->novrs = 1;
 477			break;
 478		case Opt_bs:
 479			if (match_int(&args[0], &option))
 480				return 0;
 481			n = option;
 482			if (n != 512 && n != 1024 && n != 2048 && n != 4096)
 483				return 0;
 484			uopt->blocksize = n;
 485			uopt->flags |= (1 << UDF_FLAG_BLOCKSIZE_SET);
 486			break;
 487		case Opt_unhide:
 488			uopt->flags |= (1 << UDF_FLAG_UNHIDE);
 489			break;
 490		case Opt_undelete:
 491			uopt->flags |= (1 << UDF_FLAG_UNDELETE);
 492			break;
 493		case Opt_noadinicb:
 494			uopt->flags &= ~(1 << UDF_FLAG_USE_AD_IN_ICB);
 495			break;
 496		case Opt_adinicb:
 497			uopt->flags |= (1 << UDF_FLAG_USE_AD_IN_ICB);
 498			break;
 499		case Opt_shortad:
 500			uopt->flags |= (1 << UDF_FLAG_USE_SHORT_AD);
 501			break;
 502		case Opt_longad:
 503			uopt->flags &= ~(1 << UDF_FLAG_USE_SHORT_AD);
 504			break;
 505		case Opt_gid:
 506			if (match_uint(args, &uv))
 507				return 0;
 508			uopt->gid = make_kgid(current_user_ns(), uv);
 509			if (!gid_valid(uopt->gid))
 510				return 0;
 511			uopt->flags |= (1 << UDF_FLAG_GID_SET);
 512			break;
 513		case Opt_uid:
 514			if (match_uint(args, &uv))
 515				return 0;
 516			uopt->uid = make_kuid(current_user_ns(), uv);
 517			if (!uid_valid(uopt->uid))
 518				return 0;
 519			uopt->flags |= (1 << UDF_FLAG_UID_SET);
 520			break;
 521		case Opt_umask:
 522			if (match_octal(args, &option))
 523				return 0;
 524			uopt->umask = option;
 525			break;
 526		case Opt_nostrict:
 527			uopt->flags &= ~(1 << UDF_FLAG_STRICT);
 528			break;
 529		case Opt_session:
 530			if (match_int(args, &option))
 531				return 0;
 532			uopt->session = option;
 533			if (!remount)
 534				uopt->flags |= (1 << UDF_FLAG_SESSION_SET);
 535			break;
 536		case Opt_lastblock:
 537			if (match_int(args, &option))
 538				return 0;
 539			uopt->lastblock = option;
 540			if (!remount)
 541				uopt->flags |= (1 << UDF_FLAG_LASTBLOCK_SET);
 542			break;
 543		case Opt_anchor:
 544			if (match_int(args, &option))
 545				return 0;
 546			uopt->anchor = option;
 547			break;
 548		case Opt_volume:
 
 
 
 
 549		case Opt_partition:
 
 
 
 
 550		case Opt_fileset:
 
 
 
 
 551		case Opt_rootdir:
 552			/* Ignored (never implemented properly) */
 
 
 553			break;
 554		case Opt_utf8:
 555			if (!remount) {
 556				unload_nls(uopt->nls_map);
 557				uopt->nls_map = NULL;
 558			}
 559			break;
 
 560		case Opt_iocharset:
 561			if (!remount) {
 562				unload_nls(uopt->nls_map);
 563				uopt->nls_map = NULL;
 564			}
 565			/* When nls_map is not loaded then UTF-8 is used */
 566			if (!remount && strcmp(args[0].from, "utf8") != 0) {
 567				uopt->nls_map = load_nls(args[0].from);
 568				if (!uopt->nls_map) {
 569					pr_err("iocharset %s not found\n",
 570						args[0].from);
 571					return 0;
 572				}
 573			}
 574			break;
 575		case Opt_uforget:
 576			uopt->flags |= (1 << UDF_FLAG_UID_FORGET);
 577			break;
 578		case Opt_uignore:
 579		case Opt_gignore:
 580			/* These options are superseeded by uid=<number> */
 581			break;
 582		case Opt_gforget:
 583			uopt->flags |= (1 << UDF_FLAG_GID_FORGET);
 584			break;
 585		case Opt_fmode:
 586			if (match_octal(args, &option))
 587				return 0;
 588			uopt->fmode = option & 0777;
 589			break;
 590		case Opt_dmode:
 591			if (match_octal(args, &option))
 592				return 0;
 593			uopt->dmode = option & 0777;
 594			break;
 595		default:
 596			pr_err("bad mount option \"%s\" or missing value\n", p);
 597			return 0;
 598		}
 599	}
 600	return 1;
 601}
 602
 603static int udf_remount_fs(struct super_block *sb, int *flags, char *options)
 604{
 605	struct udf_options uopt;
 606	struct udf_sb_info *sbi = UDF_SB(sb);
 607	int error = 0;
 608
 609	if (!(*flags & SB_RDONLY) && UDF_QUERY_FLAG(sb, UDF_FLAG_RW_INCOMPAT))
 610		return -EACCES;
 611
 612	sync_filesystem(sb);
 
 
 
 
 
 613
 614	uopt.flags = sbi->s_flags;
 615	uopt.uid   = sbi->s_uid;
 616	uopt.gid   = sbi->s_gid;
 617	uopt.umask = sbi->s_umask;
 618	uopt.fmode = sbi->s_fmode;
 619	uopt.dmode = sbi->s_dmode;
 620	uopt.nls_map = NULL;
 621
 622	if (!udf_parse_options(options, &uopt, true))
 623		return -EINVAL;
 624
 625	write_lock(&sbi->s_cred_lock);
 626	sbi->s_flags = uopt.flags;
 627	sbi->s_uid   = uopt.uid;
 628	sbi->s_gid   = uopt.gid;
 629	sbi->s_umask = uopt.umask;
 630	sbi->s_fmode = uopt.fmode;
 631	sbi->s_dmode = uopt.dmode;
 632	write_unlock(&sbi->s_cred_lock);
 633
 634	if ((bool)(*flags & SB_RDONLY) == sb_rdonly(sb))
 635		goto out_unlock;
 636
 637	if (*flags & SB_RDONLY)
 638		udf_close_lvid(sb);
 639	else
 640		udf_open_lvid(sb);
 641
 642out_unlock:
 643	return error;
 644}
 645
 646/*
 647 * Check VSD descriptor. Returns -1 in case we are at the end of volume
 648 * recognition area, 0 if the descriptor is valid but non-interesting, 1 if
 649 * we found one of NSR descriptors we are looking for.
 650 */
 651static int identify_vsd(const struct volStructDesc *vsd)
 652{
 653	int ret = 0;
 654
 655	if (!memcmp(vsd->stdIdent, VSD_STD_ID_CD001, VSD_STD_ID_LEN)) {
 656		switch (vsd->structType) {
 657		case 0:
 658			udf_debug("ISO9660 Boot Record found\n");
 659			break;
 660		case 1:
 661			udf_debug("ISO9660 Primary Volume Descriptor found\n");
 662			break;
 663		case 2:
 664			udf_debug("ISO9660 Supplementary Volume Descriptor found\n");
 665			break;
 666		case 3:
 667			udf_debug("ISO9660 Volume Partition Descriptor found\n");
 668			break;
 669		case 255:
 670			udf_debug("ISO9660 Volume Descriptor Set Terminator found\n");
 671			break;
 672		default:
 673			udf_debug("ISO9660 VRS (%u) found\n", vsd->structType);
 674			break;
 675		}
 676	} else if (!memcmp(vsd->stdIdent, VSD_STD_ID_BEA01, VSD_STD_ID_LEN))
 677		; /* ret = 0 */
 678	else if (!memcmp(vsd->stdIdent, VSD_STD_ID_NSR02, VSD_STD_ID_LEN))
 679		ret = 1;
 680	else if (!memcmp(vsd->stdIdent, VSD_STD_ID_NSR03, VSD_STD_ID_LEN))
 681		ret = 1;
 682	else if (!memcmp(vsd->stdIdent, VSD_STD_ID_BOOT2, VSD_STD_ID_LEN))
 683		; /* ret = 0 */
 684	else if (!memcmp(vsd->stdIdent, VSD_STD_ID_CDW02, VSD_STD_ID_LEN))
 685		; /* ret = 0 */
 686	else {
 687		/* TEA01 or invalid id : end of volume recognition area */
 688		ret = -1;
 689	}
 690
 691	return ret;
 692}
 693
 694/*
 695 * Check Volume Structure Descriptors (ECMA 167 2/9.1)
 696 * We also check any "CD-ROM Volume Descriptor Set" (ECMA 167 2/8.3.1)
 697 * @return   1 if NSR02 or NSR03 found,
 698 *	    -1 if first sector read error, 0 otherwise
 699 */
 700static int udf_check_vsd(struct super_block *sb)
 701{
 702	struct volStructDesc *vsd = NULL;
 703	loff_t sector = VSD_FIRST_SECTOR_OFFSET;
 704	int sectorsize;
 705	struct buffer_head *bh = NULL;
 706	int nsr = 0;
 
 707	struct udf_sb_info *sbi;
 708	loff_t session_offset;
 709
 710	sbi = UDF_SB(sb);
 711	if (sb->s_blocksize < sizeof(struct volStructDesc))
 712		sectorsize = sizeof(struct volStructDesc);
 713	else
 714		sectorsize = sb->s_blocksize;
 715
 716	session_offset = (loff_t)sbi->s_session << sb->s_blocksize_bits;
 717	sector += session_offset;
 718
 719	udf_debug("Starting at sector %u (%lu byte sectors)\n",
 720		  (unsigned int)(sector >> sb->s_blocksize_bits),
 721		  sb->s_blocksize);
 722	/* Process the sequence (if applicable). The hard limit on the sector
 723	 * offset is arbitrary, hopefully large enough so that all valid UDF
 724	 * filesystems will be recognised. There is no mention of an upper
 725	 * bound to the size of the volume recognition area in the standard.
 726	 *  The limit will prevent the code to read all the sectors of a
 727	 * specially crafted image (like a bluray disc full of CD001 sectors),
 728	 * potentially causing minutes or even hours of uninterruptible I/O
 729	 * activity. This actually happened with uninitialised SSD partitions
 730	 * (all 0xFF) before the check for the limit and all valid IDs were
 731	 * added */
 732	for (; !nsr && sector < VSD_MAX_SECTOR_OFFSET; sector += sectorsize) {
 
 733		/* Read a block */
 734		bh = udf_tread(sb, sector >> sb->s_blocksize_bits);
 735		if (!bh)
 736			break;
 737
 
 738		vsd = (struct volStructDesc *)(bh->b_data +
 739					      (sector & (sb->s_blocksize - 1)));
 740		nsr = identify_vsd(vsd);
 741		/* Found NSR or end? */
 742		if (nsr) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 743			brelse(bh);
 744			break;
 745		}
 746		/*
 747		 * Special handling for improperly formatted VRS (e.g., Win10)
 748		 * where components are separated by 2048 bytes even though
 749		 * sectors are 4K
 750		 */
 751		if (sb->s_blocksize == 4096) {
 752			nsr = identify_vsd(vsd + 1);
 753			/* Ignore unknown IDs... */
 754			if (nsr < 0)
 755				nsr = 0;
 756		}
 757		brelse(bh);
 758	}
 759
 760	if (nsr > 0)
 761		return 1;
 762	else if (!bh && sector - session_offset == VSD_FIRST_SECTOR_OFFSET)
 
 
 
 763		return -1;
 764	else
 765		return 0;
 766}
 767
 768static int udf_verify_domain_identifier(struct super_block *sb,
 769					struct regid *ident, char *dname)
 
 770{
 771	struct domainIdentSuffix *suffix;
 
 
 
 772
 773	if (memcmp(ident->ident, UDF_ID_COMPLIANT, strlen(UDF_ID_COMPLIANT))) {
 774		udf_warn(sb, "Not OSTA UDF compliant %s descriptor.\n", dname);
 775		goto force_ro;
 776	}
 777	if (ident->flags & ENTITYID_FLAGS_DIRTY) {
 778		udf_warn(sb, "Possibly not OSTA UDF compliant %s descriptor.\n",
 779			 dname);
 780		goto force_ro;
 781	}
 782	suffix = (struct domainIdentSuffix *)ident->identSuffix;
 783	if ((suffix->domainFlags & DOMAIN_FLAGS_HARD_WRITE_PROTECT) ||
 784	    (suffix->domainFlags & DOMAIN_FLAGS_SOFT_WRITE_PROTECT)) {
 785		if (!sb_rdonly(sb)) {
 786			udf_warn(sb, "Descriptor for %s marked write protected."
 787				 " Forcing read only mount.\n", dname);
 788		}
 789		goto force_ro;
 790	}
 791	return 0;
 792
 793force_ro:
 794	if (!sb_rdonly(sb))
 795		return -EACCES;
 796	UDF_SET_FLAG(sb, UDF_FLAG_RW_INCOMPAT);
 797	return 0;
 798}
 799
 800static int udf_load_fileset(struct super_block *sb, struct fileSetDesc *fset,
 801			    struct kernel_lb_addr *root)
 802{
 803	int ret;
 804
 805	ret = udf_verify_domain_identifier(sb, &fset->domainIdent, "file set");
 806	if (ret < 0)
 807		return ret;
 
 808
 809	*root = lelb_to_cpu(fset->rootDirectoryICB.extLocation);
 810	UDF_SB(sb)->s_serial_number = le16_to_cpu(fset->descTag.tagSerialNum);
 811
 812	udf_debug("Rootdir at block=%u, partition=%u\n",
 813		  root->logicalBlockNum, root->partitionReferenceNum);
 814	return 0;
 815}
 
 
 
 
 
 
 
 
 
 
 
 
 
 816
 817static int udf_find_fileset(struct super_block *sb,
 818			    struct kernel_lb_addr *fileset,
 819			    struct kernel_lb_addr *root)
 820{
 821	struct buffer_head *bh = NULL;
 822	uint16_t ident;
 823	int ret;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 824
 825	if (fileset->logicalBlockNum == 0xFFFFFFFF &&
 826	    fileset->partitionReferenceNum == 0xFFFF)
 827		return -EINVAL;
 
 
 828
 829	bh = udf_read_ptagged(sb, fileset, 0, &ident);
 830	if (!bh)
 831		return -EIO;
 832	if (ident != TAG_IDENT_FSD) {
 833		brelse(bh);
 834		return -EINVAL;
 835	}
 836
 837	udf_debug("Fileset at block=%u, partition=%u\n",
 838		  fileset->logicalBlockNum, fileset->partitionReferenceNum);
 839
 840	UDF_SB(sb)->s_partition = fileset->partitionReferenceNum;
 841	ret = udf_load_fileset(sb, (struct fileSetDesc *)bh->b_data, root);
 842	brelse(bh);
 843	return ret;
 844}
 845
 846/*
 847 * Load primary Volume Descriptor Sequence
 848 *
 849 * Return <0 on error, 0 on success. -EAGAIN is special meaning next sequence
 850 * should be tried.
 851 */
 852static int udf_load_pvoldesc(struct super_block *sb, sector_t block)
 853{
 854	struct primaryVolDesc *pvoldesc;
 855	uint8_t *outstr;
 856	struct buffer_head *bh;
 857	uint16_t ident;
 858	int ret;
 859	struct timestamp *ts;
 860
 861	outstr = kmalloc(128, GFP_NOFS);
 862	if (!outstr)
 863		return -ENOMEM;
 864
 865	bh = udf_read_tagged(sb, block, block, &ident);
 866	if (!bh) {
 867		ret = -EAGAIN;
 868		goto out2;
 869	}
 870
 871	if (ident != TAG_IDENT_PVD) {
 872		ret = -EIO;
 873		goto out_bh;
 874	}
 875
 876	pvoldesc = (struct primaryVolDesc *)bh->b_data;
 877
 878	udf_disk_stamp_to_time(&UDF_SB(sb)->s_record_time,
 879			      pvoldesc->recordingDateAndTime);
 880	ts = &pvoldesc->recordingDateAndTime;
 881	udf_debug("recording time %04u/%02u/%02u %02u:%02u (%x)\n",
 882		  le16_to_cpu(ts->year), ts->month, ts->day, ts->hour,
 883		  ts->minute, le16_to_cpu(ts->typeAndTimezone));
 884
 885	ret = udf_dstrCS0toChar(sb, outstr, 31, pvoldesc->volIdent, 32);
 886	if (ret < 0) {
 887		strcpy(UDF_SB(sb)->s_volume_ident, "InvalidName");
 888		pr_warn("incorrect volume identification, setting to "
 889			"'InvalidName'\n");
 890	} else {
 891		strncpy(UDF_SB(sb)->s_volume_ident, outstr, ret);
 892	}
 
 
 
 
 
 
 893	udf_debug("volIdent[] = '%s'\n", UDF_SB(sb)->s_volume_ident);
 894
 895	ret = udf_dstrCS0toChar(sb, outstr, 127, pvoldesc->volSetIdent, 128);
 896	if (ret < 0) {
 897		ret = 0;
 898		goto out_bh;
 899	}
 900	outstr[ret] = 0;
 901	udf_debug("volSetIdent[] = '%s'\n", outstr);
 902
 903	ret = 0;
 904out_bh:
 905	brelse(bh);
 906out2:
 907	kfree(outstr);
 908	return ret;
 909}
 910
 911struct inode *udf_find_metadata_inode_efe(struct super_block *sb,
 912					u32 meta_file_loc, u32 partition_ref)
 913{
 914	struct kernel_lb_addr addr;
 915	struct inode *metadata_fe;
 916
 917	addr.logicalBlockNum = meta_file_loc;
 918	addr.partitionReferenceNum = partition_ref;
 919
 920	metadata_fe = udf_iget_special(sb, &addr);
 921
 922	if (IS_ERR(metadata_fe)) {
 923		udf_warn(sb, "metadata inode efe not found\n");
 924		return metadata_fe;
 925	}
 926	if (UDF_I(metadata_fe)->i_alloc_type != ICBTAG_FLAG_AD_SHORT) {
 927		udf_warn(sb, "metadata inode efe does not have short allocation descriptors!\n");
 928		iput(metadata_fe);
 929		return ERR_PTR(-EIO);
 930	}
 931
 932	return metadata_fe;
 933}
 934
 935static int udf_load_metadata_files(struct super_block *sb, int partition,
 936				   int type1_index)
 937{
 938	struct udf_sb_info *sbi = UDF_SB(sb);
 939	struct udf_part_map *map;
 940	struct udf_meta_data *mdata;
 941	struct kernel_lb_addr addr;
 942	struct inode *fe;
 943
 944	map = &sbi->s_partmaps[partition];
 945	mdata = &map->s_type_specific.s_metadata;
 946	mdata->s_phys_partition_ref = type1_index;
 947
 948	/* metadata address */
 949	udf_debug("Metadata file location: block = %u part = %u\n",
 950		  mdata->s_meta_file_loc, mdata->s_phys_partition_ref);
 951
 952	fe = udf_find_metadata_inode_efe(sb, mdata->s_meta_file_loc,
 953					 mdata->s_phys_partition_ref);
 954	if (IS_ERR(fe)) {
 955		/* mirror file entry */
 956		udf_debug("Mirror metadata file location: block = %u part = %u\n",
 957			  mdata->s_mirror_file_loc, mdata->s_phys_partition_ref);
 958
 959		fe = udf_find_metadata_inode_efe(sb, mdata->s_mirror_file_loc,
 960						 mdata->s_phys_partition_ref);
 961
 962		if (IS_ERR(fe)) {
 963			udf_err(sb, "Both metadata and mirror metadata inode efe can not found\n");
 964			return PTR_ERR(fe);
 965		}
 966		mdata->s_mirror_fe = fe;
 967	} else
 968		mdata->s_metadata_fe = fe;
 969
 970
 971	/*
 972	 * bitmap file entry
 973	 * Note:
 974	 * Load only if bitmap file location differs from 0xFFFFFFFF (DCN-5102)
 975	*/
 976	if (mdata->s_bitmap_file_loc != 0xFFFFFFFF) {
 977		addr.logicalBlockNum = mdata->s_bitmap_file_loc;
 978		addr.partitionReferenceNum = mdata->s_phys_partition_ref;
 979
 980		udf_debug("Bitmap file location: block = %u part = %u\n",
 981			  addr.logicalBlockNum, addr.partitionReferenceNum);
 982
 983		fe = udf_iget_special(sb, &addr);
 984		if (IS_ERR(fe)) {
 985			if (sb_rdonly(sb))
 986				udf_warn(sb, "bitmap inode efe not found but it's ok since the disc is mounted read-only\n");
 987			else {
 988				udf_err(sb, "bitmap inode efe not found and attempted read-write mount\n");
 989				return PTR_ERR(fe);
 990			}
 991		} else
 992			mdata->s_bitmap_fe = fe;
 993	}
 994
 995	udf_debug("udf_load_metadata_files Ok\n");
 996	return 0;
 997}
 998
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 999int udf_compute_nr_groups(struct super_block *sb, u32 partition)
1000{
1001	struct udf_part_map *map = &UDF_SB(sb)->s_partmaps[partition];
1002	return DIV_ROUND_UP(map->s_partition_len +
1003			    (sizeof(struct spaceBitmapDesc) << 3),
1004			    sb->s_blocksize * 8);
1005}
1006
1007static struct udf_bitmap *udf_sb_alloc_bitmap(struct super_block *sb, u32 index)
1008{
1009	struct udf_bitmap *bitmap;
1010	int nr_groups = udf_compute_nr_groups(sb, index);
 
 
 
 
 
1011
1012	bitmap = kvzalloc(struct_size(bitmap, s_block_bitmap, nr_groups),
1013			  GFP_KERNEL);
1014	if (!bitmap)
 
 
 
1015		return NULL;
1016
1017	bitmap->s_nr_groups = nr_groups;
1018	return bitmap;
1019}
1020
1021static int check_partition_desc(struct super_block *sb,
1022				struct partitionDesc *p,
1023				struct udf_part_map *map)
1024{
1025	bool umap, utable, fmap, ftable;
1026	struct partitionHeaderDesc *phd;
1027
1028	switch (le32_to_cpu(p->accessType)) {
1029	case PD_ACCESS_TYPE_READ_ONLY:
1030	case PD_ACCESS_TYPE_WRITE_ONCE:
1031	case PD_ACCESS_TYPE_NONE:
1032		goto force_ro;
1033	}
1034
1035	/* No Partition Header Descriptor? */
1036	if (strcmp(p->partitionContents.ident, PD_PARTITION_CONTENTS_NSR02) &&
1037	    strcmp(p->partitionContents.ident, PD_PARTITION_CONTENTS_NSR03))
1038		goto force_ro;
1039
1040	phd = (struct partitionHeaderDesc *)p->partitionContentsUse;
1041	utable = phd->unallocSpaceTable.extLength;
1042	umap = phd->unallocSpaceBitmap.extLength;
1043	ftable = phd->freedSpaceTable.extLength;
1044	fmap = phd->freedSpaceBitmap.extLength;
1045
1046	/* No allocation info? */
1047	if (!utable && !umap && !ftable && !fmap)
1048		goto force_ro;
1049
1050	/* We don't support blocks that require erasing before overwrite */
1051	if (ftable || fmap)
1052		goto force_ro;
1053	/* UDF 2.60: 2.3.3 - no mixing of tables & bitmaps, no VAT. */
1054	if (utable && umap)
1055		goto force_ro;
1056
1057	if (map->s_partition_type == UDF_VIRTUAL_MAP15 ||
1058	    map->s_partition_type == UDF_VIRTUAL_MAP20 ||
1059	    map->s_partition_type == UDF_METADATA_MAP25)
1060		goto force_ro;
1061
1062	return 0;
1063force_ro:
1064	if (!sb_rdonly(sb))
1065		return -EACCES;
1066	UDF_SET_FLAG(sb, UDF_FLAG_RW_INCOMPAT);
1067	return 0;
1068}
1069
1070static int udf_fill_partdesc_info(struct super_block *sb,
1071		struct partitionDesc *p, int p_index)
1072{
1073	struct udf_part_map *map;
1074	struct udf_sb_info *sbi = UDF_SB(sb);
1075	struct partitionHeaderDesc *phd;
1076	int err;
1077
1078	map = &sbi->s_partmaps[p_index];
1079
1080	map->s_partition_len = le32_to_cpu(p->partitionLength); /* blocks */
1081	map->s_partition_root = le32_to_cpu(p->partitionStartingLocation);
1082
1083	if (p->accessType == cpu_to_le32(PD_ACCESS_TYPE_READ_ONLY))
1084		map->s_partition_flags |= UDF_PART_FLAG_READ_ONLY;
1085	if (p->accessType == cpu_to_le32(PD_ACCESS_TYPE_WRITE_ONCE))
1086		map->s_partition_flags |= UDF_PART_FLAG_WRITE_ONCE;
1087	if (p->accessType == cpu_to_le32(PD_ACCESS_TYPE_REWRITABLE))
1088		map->s_partition_flags |= UDF_PART_FLAG_REWRITABLE;
1089	if (p->accessType == cpu_to_le32(PD_ACCESS_TYPE_OVERWRITABLE))
1090		map->s_partition_flags |= UDF_PART_FLAG_OVERWRITABLE;
1091
1092	udf_debug("Partition (%d type %x) starts at physical %u, block length %u\n",
1093		  p_index, map->s_partition_type,
1094		  map->s_partition_root, map->s_partition_len);
1095
1096	err = check_partition_desc(sb, p, map);
1097	if (err)
1098		return err;
1099
1100	/*
1101	 * Skip loading allocation info it we cannot ever write to the fs.
1102	 * This is a correctness thing as we may have decided to force ro mount
1103	 * to avoid allocation info we don't support.
1104	 */
1105	if (UDF_QUERY_FLAG(sb, UDF_FLAG_RW_INCOMPAT))
1106		return 0;
1107
1108	phd = (struct partitionHeaderDesc *)p->partitionContentsUse;
1109	if (phd->unallocSpaceTable.extLength) {
1110		struct kernel_lb_addr loc = {
1111			.logicalBlockNum = le32_to_cpu(
1112				phd->unallocSpaceTable.extPosition),
1113			.partitionReferenceNum = p_index,
1114		};
1115		struct inode *inode;
1116
1117		inode = udf_iget_special(sb, &loc);
1118		if (IS_ERR(inode)) {
1119			udf_debug("cannot load unallocSpaceTable (part %d)\n",
1120				  p_index);
1121			return PTR_ERR(inode);
1122		}
1123		map->s_uspace.s_table = inode;
1124		map->s_partition_flags |= UDF_PART_FLAG_UNALLOC_TABLE;
1125		udf_debug("unallocSpaceTable (part %d) @ %lu\n",
1126			  p_index, map->s_uspace.s_table->i_ino);
1127	}
1128
1129	if (phd->unallocSpaceBitmap.extLength) {
1130		struct udf_bitmap *bitmap = udf_sb_alloc_bitmap(sb, p_index);
1131		if (!bitmap)
1132			return -ENOMEM;
1133		map->s_uspace.s_bitmap = bitmap;
1134		bitmap->s_extPosition = le32_to_cpu(
1135				phd->unallocSpaceBitmap.extPosition);
1136		map->s_partition_flags |= UDF_PART_FLAG_UNALLOC_BITMAP;
1137		udf_debug("unallocSpaceBitmap (part %d) @ %u\n",
1138			  p_index, bitmap->s_extPosition);
1139	}
1140
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1141	return 0;
1142}
1143
1144static void udf_find_vat_block(struct super_block *sb, int p_index,
1145			       int type1_index, sector_t start_block)
1146{
1147	struct udf_sb_info *sbi = UDF_SB(sb);
1148	struct udf_part_map *map = &sbi->s_partmaps[p_index];
1149	sector_t vat_block;
1150	struct kernel_lb_addr ino;
1151	struct inode *inode;
1152
1153	/*
1154	 * VAT file entry is in the last recorded block. Some broken disks have
1155	 * it a few blocks before so try a bit harder...
1156	 */
1157	ino.partitionReferenceNum = type1_index;
1158	for (vat_block = start_block;
1159	     vat_block >= map->s_partition_root &&
1160	     vat_block >= start_block - 3; vat_block--) {
1161		ino.logicalBlockNum = vat_block - map->s_partition_root;
1162		inode = udf_iget_special(sb, &ino);
1163		if (!IS_ERR(inode)) {
1164			sbi->s_vat_inode = inode;
1165			break;
1166		}
1167	}
1168}
1169
1170static int udf_load_vat(struct super_block *sb, int p_index, int type1_index)
1171{
1172	struct udf_sb_info *sbi = UDF_SB(sb);
1173	struct udf_part_map *map = &sbi->s_partmaps[p_index];
1174	struct buffer_head *bh = NULL;
1175	struct udf_inode_info *vati;
1176	uint32_t pos;
1177	struct virtualAllocationTable20 *vat20;
1178	sector_t blocks = i_size_read(sb->s_bdev->bd_inode) >>
1179			  sb->s_blocksize_bits;
1180
1181	udf_find_vat_block(sb, p_index, type1_index, sbi->s_last_block);
1182	if (!sbi->s_vat_inode &&
1183	    sbi->s_last_block != blocks - 1) {
1184		pr_notice("Failed to read VAT inode from the last recorded block (%lu), retrying with the last block of the device (%lu).\n",
1185			  (unsigned long)sbi->s_last_block,
1186			  (unsigned long)blocks - 1);
1187		udf_find_vat_block(sb, p_index, type1_index, blocks - 1);
1188	}
1189	if (!sbi->s_vat_inode)
1190		return -EIO;
1191
1192	if (map->s_partition_type == UDF_VIRTUAL_MAP15) {
1193		map->s_type_specific.s_virtual.s_start_offset = 0;
1194		map->s_type_specific.s_virtual.s_num_entries =
1195			(sbi->s_vat_inode->i_size - 36) >> 2;
1196	} else if (map->s_partition_type == UDF_VIRTUAL_MAP20) {
1197		vati = UDF_I(sbi->s_vat_inode);
1198		if (vati->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) {
1199			pos = udf_block_map(sbi->s_vat_inode, 0);
1200			bh = sb_bread(sb, pos);
1201			if (!bh)
1202				return -EIO;
1203			vat20 = (struct virtualAllocationTable20 *)bh->b_data;
1204		} else {
1205			vat20 = (struct virtualAllocationTable20 *)
1206							vati->i_data;
1207		}
1208
1209		map->s_type_specific.s_virtual.s_start_offset =
1210			le16_to_cpu(vat20->lengthHeader);
1211		map->s_type_specific.s_virtual.s_num_entries =
1212			(sbi->s_vat_inode->i_size -
1213				map->s_type_specific.s_virtual.
1214					s_start_offset) >> 2;
1215		brelse(bh);
1216	}
1217	return 0;
1218}
1219
1220/*
1221 * Load partition descriptor block
1222 *
1223 * Returns <0 on error, 0 on success, -EAGAIN is special - try next descriptor
1224 * sequence.
1225 */
1226static int udf_load_partdesc(struct super_block *sb, sector_t block)
1227{
1228	struct buffer_head *bh;
1229	struct partitionDesc *p;
1230	struct udf_part_map *map;
1231	struct udf_sb_info *sbi = UDF_SB(sb);
1232	int i, type1_idx;
1233	uint16_t partitionNumber;
1234	uint16_t ident;
1235	int ret;
1236
1237	bh = udf_read_tagged(sb, block, block, &ident);
1238	if (!bh)
1239		return -EAGAIN;
1240	if (ident != TAG_IDENT_PD) {
1241		ret = 0;
1242		goto out_bh;
1243	}
1244
1245	p = (struct partitionDesc *)bh->b_data;
1246	partitionNumber = le16_to_cpu(p->partitionNumber);
1247
1248	/* First scan for TYPE1 and SPARABLE partitions */
1249	for (i = 0; i < sbi->s_partitions; i++) {
1250		map = &sbi->s_partmaps[i];
1251		udf_debug("Searching map: (%u == %u)\n",
1252			  map->s_partition_num, partitionNumber);
1253		if (map->s_partition_num == partitionNumber &&
1254		    (map->s_partition_type == UDF_TYPE1_MAP15 ||
1255		     map->s_partition_type == UDF_SPARABLE_MAP15))
1256			break;
1257	}
1258
1259	if (i >= sbi->s_partitions) {
1260		udf_debug("Partition (%u) not found in partition map\n",
1261			  partitionNumber);
1262		ret = 0;
1263		goto out_bh;
1264	}
1265
1266	ret = udf_fill_partdesc_info(sb, p, i);
1267	if (ret < 0)
1268		goto out_bh;
1269
1270	/*
1271	 * Now rescan for VIRTUAL or METADATA partitions when SPARABLE and
1272	 * PHYSICAL partitions are already set up
1273	 */
1274	type1_idx = i;
 
1275	map = NULL; /* supress 'maybe used uninitialized' warning */
 
1276	for (i = 0; i < sbi->s_partitions; i++) {
1277		map = &sbi->s_partmaps[i];
1278
1279		if (map->s_partition_num == partitionNumber &&
1280		    (map->s_partition_type == UDF_VIRTUAL_MAP15 ||
1281		     map->s_partition_type == UDF_VIRTUAL_MAP20 ||
1282		     map->s_partition_type == UDF_METADATA_MAP25))
1283			break;
1284	}
1285
1286	if (i >= sbi->s_partitions) {
1287		ret = 0;
1288		goto out_bh;
1289	}
1290
1291	ret = udf_fill_partdesc_info(sb, p, i);
1292	if (ret < 0)
1293		goto out_bh;
1294
1295	if (map->s_partition_type == UDF_METADATA_MAP25) {
1296		ret = udf_load_metadata_files(sb, i, type1_idx);
1297		if (ret < 0) {
1298			udf_err(sb, "error loading MetaData partition map %d\n",
1299				i);
1300			goto out_bh;
1301		}
1302	} else {
1303		/*
1304		 * If we have a partition with virtual map, we don't handle
1305		 * writing to it (we overwrite blocks instead of relocating
1306		 * them).
1307		 */
1308		if (!sb_rdonly(sb)) {
1309			ret = -EACCES;
1310			goto out_bh;
1311		}
1312		UDF_SET_FLAG(sb, UDF_FLAG_RW_INCOMPAT);
1313		ret = udf_load_vat(sb, i, type1_idx);
1314		if (ret < 0)
1315			goto out_bh;
1316	}
1317	ret = 0;
1318out_bh:
1319	/* In case loading failed, we handle cleanup in udf_fill_super */
1320	brelse(bh);
1321	return ret;
1322}
1323
1324static int udf_load_sparable_map(struct super_block *sb,
1325				 struct udf_part_map *map,
1326				 struct sparablePartitionMap *spm)
1327{
1328	uint32_t loc;
1329	uint16_t ident;
1330	struct sparingTable *st;
1331	struct udf_sparing_data *sdata = &map->s_type_specific.s_sparing;
1332	int i;
1333	struct buffer_head *bh;
1334
1335	map->s_partition_type = UDF_SPARABLE_MAP15;
1336	sdata->s_packet_len = le16_to_cpu(spm->packetLength);
1337	if (!is_power_of_2(sdata->s_packet_len)) {
1338		udf_err(sb, "error loading logical volume descriptor: "
1339			"Invalid packet length %u\n",
1340			(unsigned)sdata->s_packet_len);
1341		return -EIO;
1342	}
1343	if (spm->numSparingTables > 4) {
1344		udf_err(sb, "error loading logical volume descriptor: "
1345			"Too many sparing tables (%d)\n",
1346			(int)spm->numSparingTables);
1347		return -EIO;
1348	}
1349	if (le32_to_cpu(spm->sizeSparingTable) > sb->s_blocksize) {
1350		udf_err(sb, "error loading logical volume descriptor: "
1351			"Too big sparing table size (%u)\n",
1352			le32_to_cpu(spm->sizeSparingTable));
1353		return -EIO;
1354	}
1355
1356	for (i = 0; i < spm->numSparingTables; i++) {
1357		loc = le32_to_cpu(spm->locSparingTable[i]);
1358		bh = udf_read_tagged(sb, loc, loc, &ident);
1359		if (!bh)
1360			continue;
1361
1362		st = (struct sparingTable *)bh->b_data;
1363		if (ident != 0 ||
1364		    strncmp(st->sparingIdent.ident, UDF_ID_SPARING,
1365			    strlen(UDF_ID_SPARING)) ||
1366		    sizeof(*st) + le16_to_cpu(st->reallocationTableLen) >
1367							sb->s_blocksize) {
1368			brelse(bh);
1369			continue;
1370		}
1371
1372		sdata->s_spar_map[i] = bh;
1373	}
1374	map->s_partition_func = udf_get_pblock_spar15;
1375	return 0;
1376}
1377
1378static int udf_load_logicalvol(struct super_block *sb, sector_t block,
1379			       struct kernel_lb_addr *fileset)
1380{
1381	struct logicalVolDesc *lvd;
1382	int i, offset;
1383	uint8_t type;
1384	struct udf_sb_info *sbi = UDF_SB(sb);
1385	struct genericPartitionMap *gpm;
1386	uint16_t ident;
1387	struct buffer_head *bh;
1388	unsigned int table_len;
1389	int ret;
1390
1391	bh = udf_read_tagged(sb, block, block, &ident);
1392	if (!bh)
1393		return -EAGAIN;
1394	BUG_ON(ident != TAG_IDENT_LVD);
1395	lvd = (struct logicalVolDesc *)bh->b_data;
1396	table_len = le32_to_cpu(lvd->mapTableLength);
1397	if (table_len > sb->s_blocksize - sizeof(*lvd)) {
1398		udf_err(sb, "error loading logical volume descriptor: "
1399			"Partition table too long (%u > %lu)\n", table_len,
1400			sb->s_blocksize - sizeof(*lvd));
1401		ret = -EIO;
1402		goto out_bh;
1403	}
1404
1405	ret = udf_verify_domain_identifier(sb, &lvd->domainIdent,
1406					   "logical volume");
1407	if (ret)
1408		goto out_bh;
1409	ret = udf_sb_alloc_partition_maps(sb, le32_to_cpu(lvd->numPartitionMaps));
1410	if (ret)
1411		goto out_bh;
1412
1413	for (i = 0, offset = 0;
1414	     i < sbi->s_partitions && offset < table_len;
1415	     i++, offset += gpm->partitionMapLength) {
1416		struct udf_part_map *map = &sbi->s_partmaps[i];
1417		gpm = (struct genericPartitionMap *)
1418				&(lvd->partitionMaps[offset]);
1419		type = gpm->partitionMapType;
1420		if (type == 1) {
1421			struct genericPartitionMap1 *gpm1 =
1422				(struct genericPartitionMap1 *)gpm;
1423			map->s_partition_type = UDF_TYPE1_MAP15;
1424			map->s_volumeseqnum = le16_to_cpu(gpm1->volSeqNum);
1425			map->s_partition_num = le16_to_cpu(gpm1->partitionNum);
1426			map->s_partition_func = NULL;
1427		} else if (type == 2) {
1428			struct udfPartitionMap2 *upm2 =
1429						(struct udfPartitionMap2 *)gpm;
1430			if (!strncmp(upm2->partIdent.ident, UDF_ID_VIRTUAL,
1431						strlen(UDF_ID_VIRTUAL))) {
1432				u16 suf =
1433					le16_to_cpu(((__le16 *)upm2->partIdent.
1434							identSuffix)[0]);
1435				if (suf < 0x0200) {
1436					map->s_partition_type =
1437							UDF_VIRTUAL_MAP15;
1438					map->s_partition_func =
1439							udf_get_pblock_virt15;
1440				} else {
1441					map->s_partition_type =
1442							UDF_VIRTUAL_MAP20;
1443					map->s_partition_func =
1444							udf_get_pblock_virt20;
1445				}
1446			} else if (!strncmp(upm2->partIdent.ident,
1447						UDF_ID_SPARABLE,
1448						strlen(UDF_ID_SPARABLE))) {
1449				ret = udf_load_sparable_map(sb, map,
1450					(struct sparablePartitionMap *)gpm);
1451				if (ret < 0)
1452					goto out_bh;
1453			} else if (!strncmp(upm2->partIdent.ident,
1454						UDF_ID_METADATA,
1455						strlen(UDF_ID_METADATA))) {
1456				struct udf_meta_data *mdata =
1457					&map->s_type_specific.s_metadata;
1458				struct metadataPartitionMap *mdm =
1459						(struct metadataPartitionMap *)
1460						&(lvd->partitionMaps[offset]);
1461				udf_debug("Parsing Logical vol part %d type %u  id=%s\n",
1462					  i, type, UDF_ID_METADATA);
1463
1464				map->s_partition_type = UDF_METADATA_MAP25;
1465				map->s_partition_func = udf_get_pblock_meta25;
1466
1467				mdata->s_meta_file_loc   =
1468					le32_to_cpu(mdm->metadataFileLoc);
1469				mdata->s_mirror_file_loc =
1470					le32_to_cpu(mdm->metadataMirrorFileLoc);
1471				mdata->s_bitmap_file_loc =
1472					le32_to_cpu(mdm->metadataBitmapFileLoc);
1473				mdata->s_alloc_unit_size =
1474					le32_to_cpu(mdm->allocUnitSize);
1475				mdata->s_align_unit_size =
1476					le16_to_cpu(mdm->alignUnitSize);
1477				if (mdm->flags & 0x01)
1478					mdata->s_flags |= MF_DUPLICATE_MD;
1479
1480				udf_debug("Metadata Ident suffix=0x%x\n",
1481					  le16_to_cpu(*(__le16 *)
1482						      mdm->partIdent.identSuffix));
1483				udf_debug("Metadata part num=%u\n",
1484					  le16_to_cpu(mdm->partitionNum));
1485				udf_debug("Metadata part alloc unit size=%u\n",
1486					  le32_to_cpu(mdm->allocUnitSize));
1487				udf_debug("Metadata file loc=%u\n",
1488					  le32_to_cpu(mdm->metadataFileLoc));
1489				udf_debug("Mirror file loc=%u\n",
1490					  le32_to_cpu(mdm->metadataMirrorFileLoc));
1491				udf_debug("Bitmap file loc=%u\n",
1492					  le32_to_cpu(mdm->metadataBitmapFileLoc));
1493				udf_debug("Flags: %d %u\n",
1494					  mdata->s_flags, mdm->flags);
1495			} else {
1496				udf_debug("Unknown ident: %s\n",
1497					  upm2->partIdent.ident);
1498				continue;
1499			}
1500			map->s_volumeseqnum = le16_to_cpu(upm2->volSeqNum);
1501			map->s_partition_num = le16_to_cpu(upm2->partitionNum);
1502		}
1503		udf_debug("Partition (%d:%u) type %u on volume %u\n",
1504			  i, map->s_partition_num, type, map->s_volumeseqnum);
1505	}
1506
1507	if (fileset) {
1508		struct long_ad *la = (struct long_ad *)&(lvd->logicalVolContentsUse[0]);
1509
1510		*fileset = lelb_to_cpu(la->extLocation);
1511		udf_debug("FileSet found in LogicalVolDesc at block=%u, partition=%u\n",
1512			  fileset->logicalBlockNum,
1513			  fileset->partitionReferenceNum);
1514	}
1515	if (lvd->integritySeqExt.extLength)
1516		udf_load_logicalvolint(sb, leea_to_cpu(lvd->integritySeqExt));
1517	ret = 0;
1518
1519	if (!sbi->s_lvid_bh) {
1520		/* We can't generate unique IDs without a valid LVID */
1521		if (sb_rdonly(sb)) {
1522			UDF_SET_FLAG(sb, UDF_FLAG_RW_INCOMPAT);
1523		} else {
1524			udf_warn(sb, "Damaged or missing LVID, forcing "
1525				     "readonly mount\n");
1526			ret = -EACCES;
1527		}
1528	}
1529out_bh:
1530	brelse(bh);
1531	return ret;
1532}
1533
1534/*
1535 * Find the prevailing Logical Volume Integrity Descriptor.
1536 */
1537static void udf_load_logicalvolint(struct super_block *sb, struct kernel_extent_ad loc)
1538{
1539	struct buffer_head *bh, *final_bh;
1540	uint16_t ident;
1541	struct udf_sb_info *sbi = UDF_SB(sb);
1542	struct logicalVolIntegrityDesc *lvid;
1543	int indirections = 0;
1544	u32 parts, impuselen;
1545
1546	while (++indirections <= UDF_MAX_LVID_NESTING) {
1547		final_bh = NULL;
1548		while (loc.extLength > 0 &&
1549			(bh = udf_read_tagged(sb, loc.extLocation,
1550					loc.extLocation, &ident))) {
1551			if (ident != TAG_IDENT_LVID) {
1552				brelse(bh);
1553				break;
1554			}
1555
1556			brelse(final_bh);
1557			final_bh = bh;
1558
1559			loc.extLength -= sb->s_blocksize;
1560			loc.extLocation++;
1561		}
1562
1563		if (!final_bh)
1564			return;
1565
1566		brelse(sbi->s_lvid_bh);
1567		sbi->s_lvid_bh = final_bh;
1568
1569		lvid = (struct logicalVolIntegrityDesc *)final_bh->b_data;
1570		if (lvid->nextIntegrityExt.extLength == 0)
1571			goto check;
1572
1573		loc = leea_to_cpu(lvid->nextIntegrityExt);
1574	}
1575
1576	udf_warn(sb, "Too many LVID indirections (max %u), ignoring.\n",
1577		UDF_MAX_LVID_NESTING);
1578out_err:
1579	brelse(sbi->s_lvid_bh);
1580	sbi->s_lvid_bh = NULL;
1581	return;
1582check:
1583	parts = le32_to_cpu(lvid->numOfPartitions);
1584	impuselen = le32_to_cpu(lvid->lengthOfImpUse);
1585	if (parts >= sb->s_blocksize || impuselen >= sb->s_blocksize ||
1586	    sizeof(struct logicalVolIntegrityDesc) + impuselen +
1587	    2 * parts * sizeof(u32) > sb->s_blocksize) {
1588		udf_warn(sb, "Corrupted LVID (parts=%u, impuselen=%u), "
1589			 "ignoring.\n", parts, impuselen);
1590		goto out_err;
1591	}
1592}
1593
1594/*
1595 * Step for reallocation of table of partition descriptor sequence numbers.
1596 * Must be power of 2.
1597 */
1598#define PART_DESC_ALLOC_STEP 32
1599
1600struct part_desc_seq_scan_data {
1601	struct udf_vds_record rec;
1602	u32 partnum;
1603};
1604
1605struct desc_seq_scan_data {
1606	struct udf_vds_record vds[VDS_POS_LENGTH];
1607	unsigned int size_part_descs;
1608	unsigned int num_part_descs;
1609	struct part_desc_seq_scan_data *part_descs_loc;
1610};
1611
1612static struct udf_vds_record *handle_partition_descriptor(
1613				struct buffer_head *bh,
1614				struct desc_seq_scan_data *data)
1615{
1616	struct partitionDesc *desc = (struct partitionDesc *)bh->b_data;
1617	int partnum;
1618	int i;
1619
1620	partnum = le16_to_cpu(desc->partitionNumber);
1621	for (i = 0; i < data->num_part_descs; i++)
1622		if (partnum == data->part_descs_loc[i].partnum)
1623			return &(data->part_descs_loc[i].rec);
1624	if (data->num_part_descs >= data->size_part_descs) {
1625		struct part_desc_seq_scan_data *new_loc;
1626		unsigned int new_size = ALIGN(partnum, PART_DESC_ALLOC_STEP);
1627
1628		new_loc = kcalloc(new_size, sizeof(*new_loc), GFP_KERNEL);
1629		if (!new_loc)
1630			return ERR_PTR(-ENOMEM);
1631		memcpy(new_loc, data->part_descs_loc,
1632		       data->size_part_descs * sizeof(*new_loc));
1633		kfree(data->part_descs_loc);
1634		data->part_descs_loc = new_loc;
1635		data->size_part_descs = new_size;
1636	}
1637	return &(data->part_descs_loc[data->num_part_descs++].rec);
1638}
1639
1640
1641static struct udf_vds_record *get_volume_descriptor_record(uint16_t ident,
1642		struct buffer_head *bh, struct desc_seq_scan_data *data)
1643{
1644	switch (ident) {
1645	case TAG_IDENT_PVD: /* ISO 13346 3/10.1 */
1646		return &(data->vds[VDS_POS_PRIMARY_VOL_DESC]);
1647	case TAG_IDENT_IUVD: /* ISO 13346 3/10.4 */
1648		return &(data->vds[VDS_POS_IMP_USE_VOL_DESC]);
1649	case TAG_IDENT_LVD: /* ISO 13346 3/10.6 */
1650		return &(data->vds[VDS_POS_LOGICAL_VOL_DESC]);
1651	case TAG_IDENT_USD: /* ISO 13346 3/10.8 */
1652		return &(data->vds[VDS_POS_UNALLOC_SPACE_DESC]);
1653	case TAG_IDENT_PD: /* ISO 13346 3/10.5 */
1654		return handle_partition_descriptor(bh, data);
1655	}
1656	return NULL;
1657}
1658
1659/*
1660 * Process a main/reserve volume descriptor sequence.
1661 *   @block		First block of first extent of the sequence.
1662 *   @lastblock		Lastblock of first extent of the sequence.
1663 *   @fileset		There we store extent containing root fileset
1664 *
1665 * Returns <0 on error, 0 on success. -EAGAIN is special - try next descriptor
1666 * sequence
1667 */
1668static noinline int udf_process_sequence(
1669		struct super_block *sb,
1670		sector_t block, sector_t lastblock,
1671		struct kernel_lb_addr *fileset)
1672{
1673	struct buffer_head *bh = NULL;
 
1674	struct udf_vds_record *curr;
1675	struct generic_desc *gd;
1676	struct volDescPtr *vdp;
1677	bool done = false;
1678	uint32_t vdsn;
1679	uint16_t ident;
 
1680	int ret;
1681	unsigned int indirections = 0;
1682	struct desc_seq_scan_data data;
1683	unsigned int i;
1684
1685	memset(data.vds, 0, sizeof(struct udf_vds_record) * VDS_POS_LENGTH);
1686	data.size_part_descs = PART_DESC_ALLOC_STEP;
1687	data.num_part_descs = 0;
1688	data.part_descs_loc = kcalloc(data.size_part_descs,
1689				      sizeof(*data.part_descs_loc),
1690				      GFP_KERNEL);
1691	if (!data.part_descs_loc)
1692		return -ENOMEM;
1693
1694	/*
1695	 * Read the main descriptor sequence and find which descriptors
1696	 * are in it.
1697	 */
1698	for (; (!done && block <= lastblock); block++) {
 
1699		bh = udf_read_tagged(sb, block, block, &ident);
1700		if (!bh)
1701			break;
 
 
 
 
1702
1703		/* Process each descriptor (ISO 13346 3/8.3-8.4) */
1704		gd = (struct generic_desc *)bh->b_data;
1705		vdsn = le32_to_cpu(gd->volDescSeqNum);
1706		switch (ident) {
1707		case TAG_IDENT_VDP: /* ISO 13346 3/10.3 */
1708			if (++indirections > UDF_MAX_TD_NESTING) {
1709				udf_err(sb, "too many Volume Descriptor "
1710					"Pointers (max %u supported)\n",
1711					UDF_MAX_TD_NESTING);
1712				brelse(bh);
1713				ret = -EIO;
1714				goto out;
1715			}
 
 
 
 
 
 
1716
1717			vdp = (struct volDescPtr *)bh->b_data;
1718			block = le32_to_cpu(vdp->nextVolDescSeqExt.extLocation);
1719			lastblock = le32_to_cpu(
1720				vdp->nextVolDescSeqExt.extLength) >>
1721				sb->s_blocksize_bits;
1722			lastblock += block - 1;
1723			/* For loop is going to increment 'block' again */
1724			block--;
1725			break;
1726		case TAG_IDENT_PVD: /* ISO 13346 3/10.1 */
1727		case TAG_IDENT_IUVD: /* ISO 13346 3/10.4 */
1728		case TAG_IDENT_LVD: /* ISO 13346 3/10.6 */
1729		case TAG_IDENT_USD: /* ISO 13346 3/10.8 */
 
 
 
 
1730		case TAG_IDENT_PD: /* ISO 13346 3/10.5 */
1731			curr = get_volume_descriptor_record(ident, bh, &data);
1732			if (IS_ERR(curr)) {
1733				brelse(bh);
1734				ret = PTR_ERR(curr);
1735				goto out;
 
 
 
 
1736			}
1737			/* Descriptor we don't care about? */
1738			if (!curr)
1739				break;
1740			if (vdsn >= curr->volDescSeqNum) {
1741				curr->volDescSeqNum = vdsn;
1742				curr->block = block;
1743			}
1744			break;
1745		case TAG_IDENT_TD: /* ISO 13346 3/10.9 */
1746			done = true;
 
 
 
 
 
 
 
 
 
 
 
 
1747			break;
1748		}
1749		brelse(bh);
1750	}
1751	/*
1752	 * Now read interesting descriptors again and process them
1753	 * in a suitable order
1754	 */
1755	if (!data.vds[VDS_POS_PRIMARY_VOL_DESC].block) {
1756		udf_err(sb, "Primary Volume Descriptor not found!\n");
1757		ret = -EAGAIN;
1758		goto out;
1759	}
1760	ret = udf_load_pvoldesc(sb, data.vds[VDS_POS_PRIMARY_VOL_DESC].block);
1761	if (ret < 0)
1762		goto out;
1763
1764	if (data.vds[VDS_POS_LOGICAL_VOL_DESC].block) {
1765		ret = udf_load_logicalvol(sb,
1766				data.vds[VDS_POS_LOGICAL_VOL_DESC].block,
1767				fileset);
1768		if (ret < 0)
1769			goto out;
1770	}
1771
1772	/* Now handle prevailing Partition Descriptors */
1773	for (i = 0; i < data.num_part_descs; i++) {
1774		ret = udf_load_partdesc(sb, data.part_descs_loc[i].rec.block);
1775		if (ret < 0)
1776			goto out;
 
 
 
 
 
 
 
1777	}
1778	ret = 0;
1779out:
1780	kfree(data.part_descs_loc);
1781	return ret;
1782}
1783
1784/*
1785 * Load Volume Descriptor Sequence described by anchor in bh
1786 *
1787 * Returns <0 on error, 0 on success
1788 */
1789static int udf_load_sequence(struct super_block *sb, struct buffer_head *bh,
1790			     struct kernel_lb_addr *fileset)
1791{
1792	struct anchorVolDescPtr *anchor;
1793	sector_t main_s, main_e, reserve_s, reserve_e;
1794	int ret;
1795
1796	anchor = (struct anchorVolDescPtr *)bh->b_data;
1797
1798	/* Locate the main sequence */
1799	main_s = le32_to_cpu(anchor->mainVolDescSeqExt.extLocation);
1800	main_e = le32_to_cpu(anchor->mainVolDescSeqExt.extLength);
1801	main_e = main_e >> sb->s_blocksize_bits;
1802	main_e += main_s - 1;
1803
1804	/* Locate the reserve sequence */
1805	reserve_s = le32_to_cpu(anchor->reserveVolDescSeqExt.extLocation);
1806	reserve_e = le32_to_cpu(anchor->reserveVolDescSeqExt.extLength);
1807	reserve_e = reserve_e >> sb->s_blocksize_bits;
1808	reserve_e += reserve_s - 1;
1809
1810	/* Process the main & reserve sequences */
1811	/* responsible for finding the PartitionDesc(s) */
1812	ret = udf_process_sequence(sb, main_s, main_e, fileset);
1813	if (ret != -EAGAIN)
1814		return ret;
1815	udf_sb_free_partitions(sb);
1816	ret = udf_process_sequence(sb, reserve_s, reserve_e, fileset);
1817	if (ret < 0) {
1818		udf_sb_free_partitions(sb);
1819		/* No sequence was OK, return -EIO */
1820		if (ret == -EAGAIN)
1821			ret = -EIO;
1822	}
1823	return ret;
1824}
1825
1826/*
1827 * Check whether there is an anchor block in the given block and
1828 * load Volume Descriptor Sequence if so.
1829 *
1830 * Returns <0 on error, 0 on success, -EAGAIN is special - try next anchor
1831 * block
1832 */
1833static int udf_check_anchor_block(struct super_block *sb, sector_t block,
1834				  struct kernel_lb_addr *fileset)
1835{
1836	struct buffer_head *bh;
1837	uint16_t ident;
1838	int ret;
1839
1840	if (UDF_QUERY_FLAG(sb, UDF_FLAG_VARCONV) &&
1841	    udf_fixed_to_variable(block) >=
1842	    i_size_read(sb->s_bdev->bd_inode) >> sb->s_blocksize_bits)
1843		return -EAGAIN;
1844
1845	bh = udf_read_tagged(sb, block, block, &ident);
1846	if (!bh)
1847		return -EAGAIN;
1848	if (ident != TAG_IDENT_AVDP) {
1849		brelse(bh);
1850		return -EAGAIN;
1851	}
1852	ret = udf_load_sequence(sb, bh, fileset);
1853	brelse(bh);
1854	return ret;
1855}
1856
1857/*
1858 * Search for an anchor volume descriptor pointer.
1859 *
1860 * Returns < 0 on error, 0 on success. -EAGAIN is special - try next set
1861 * of anchors.
1862 */
1863static int udf_scan_anchors(struct super_block *sb, sector_t *lastblock,
1864			    struct kernel_lb_addr *fileset)
1865{
1866	sector_t last[6];
1867	int i;
1868	struct udf_sb_info *sbi = UDF_SB(sb);
1869	int last_count = 0;
1870	int ret;
1871
1872	/* First try user provided anchor */
1873	if (sbi->s_anchor) {
1874		ret = udf_check_anchor_block(sb, sbi->s_anchor, fileset);
1875		if (ret != -EAGAIN)
1876			return ret;
1877	}
1878	/*
1879	 * according to spec, anchor is in either:
1880	 *     block 256
1881	 *     lastblock-256
1882	 *     lastblock
1883	 *  however, if the disc isn't closed, it could be 512.
1884	 */
1885	ret = udf_check_anchor_block(sb, sbi->s_session + 256, fileset);
1886	if (ret != -EAGAIN)
1887		return ret;
1888	/*
1889	 * The trouble is which block is the last one. Drives often misreport
1890	 * this so we try various possibilities.
1891	 */
1892	last[last_count++] = *lastblock;
1893	if (*lastblock >= 1)
1894		last[last_count++] = *lastblock - 1;
1895	last[last_count++] = *lastblock + 1;
1896	if (*lastblock >= 2)
1897		last[last_count++] = *lastblock - 2;
1898	if (*lastblock >= 150)
1899		last[last_count++] = *lastblock - 150;
1900	if (*lastblock >= 152)
1901		last[last_count++] = *lastblock - 152;
1902
1903	for (i = 0; i < last_count; i++) {
1904		if (last[i] >= i_size_read(sb->s_bdev->bd_inode) >>
1905				sb->s_blocksize_bits)
1906			continue;
1907		ret = udf_check_anchor_block(sb, last[i], fileset);
1908		if (ret != -EAGAIN) {
1909			if (!ret)
1910				*lastblock = last[i];
1911			return ret;
1912		}
1913		if (last[i] < 256)
1914			continue;
1915		ret = udf_check_anchor_block(sb, last[i] - 256, fileset);
1916		if (ret != -EAGAIN) {
1917			if (!ret)
1918				*lastblock = last[i];
1919			return ret;
1920		}
1921	}
1922
1923	/* Finally try block 512 in case media is open */
1924	return udf_check_anchor_block(sb, sbi->s_session + 512, fileset);
1925}
1926
1927/*
1928 * Find an anchor volume descriptor and load Volume Descriptor Sequence from
1929 * area specified by it. The function expects sbi->s_lastblock to be the last
1930 * block on the media.
1931 *
1932 * Return <0 on error, 0 if anchor found. -EAGAIN is special meaning anchor
1933 * was not found.
1934 */
1935static int udf_find_anchor(struct super_block *sb,
1936			   struct kernel_lb_addr *fileset)
1937{
1938	struct udf_sb_info *sbi = UDF_SB(sb);
1939	sector_t lastblock = sbi->s_last_block;
1940	int ret;
1941
1942	ret = udf_scan_anchors(sb, &lastblock, fileset);
1943	if (ret != -EAGAIN)
1944		goto out;
1945
1946	/* No anchor found? Try VARCONV conversion of block numbers */
1947	UDF_SET_FLAG(sb, UDF_FLAG_VARCONV);
1948	lastblock = udf_variable_to_fixed(sbi->s_last_block);
1949	/* Firstly, we try to not convert number of the last block */
1950	ret = udf_scan_anchors(sb, &lastblock, fileset);
1951	if (ret != -EAGAIN)
1952		goto out;
1953
1954	lastblock = sbi->s_last_block;
1955	/* Secondly, we try with converted number of the last block */
1956	ret = udf_scan_anchors(sb, &lastblock, fileset);
1957	if (ret < 0) {
1958		/* VARCONV didn't help. Clear it. */
1959		UDF_CLEAR_FLAG(sb, UDF_FLAG_VARCONV);
1960	}
1961out:
1962	if (ret == 0)
1963		sbi->s_last_block = lastblock;
1964	return ret;
1965}
1966
1967/*
1968 * Check Volume Structure Descriptor, find Anchor block and load Volume
1969 * Descriptor Sequence.
1970 *
1971 * Returns < 0 on error, 0 on success. -EAGAIN is special meaning anchor
1972 * block was not found.
1973 */
1974static int udf_load_vrs(struct super_block *sb, struct udf_options *uopt,
1975			int silent, struct kernel_lb_addr *fileset)
1976{
1977	struct udf_sb_info *sbi = UDF_SB(sb);
1978	int nsr = 0;
1979	int ret;
1980
1981	if (!sb_set_blocksize(sb, uopt->blocksize)) {
1982		if (!silent)
1983			udf_warn(sb, "Bad block size\n");
1984		return -EINVAL;
1985	}
1986	sbi->s_last_block = uopt->lastblock;
1987	if (!uopt->novrs) {
1988		/* Check that it is NSR02 compliant */
1989		nsr = udf_check_vsd(sb);
1990		if (!nsr) {
1991			if (!silent)
1992				udf_warn(sb, "No VRS found\n");
1993			return -EINVAL;
1994		}
1995		if (nsr == -1)
1996			udf_debug("Failed to read sector at offset %d. "
1997				  "Assuming open disc. Skipping validity "
1998				  "check\n", VSD_FIRST_SECTOR_OFFSET);
1999		if (!sbi->s_last_block)
2000			sbi->s_last_block = udf_get_last_block(sb);
2001	} else {
2002		udf_debug("Validity check skipped because of novrs option\n");
2003	}
2004
2005	/* Look for anchor block and load Volume Descriptor Sequence */
2006	sbi->s_anchor = uopt->anchor;
2007	ret = udf_find_anchor(sb, fileset);
2008	if (ret < 0) {
2009		if (!silent && ret == -EAGAIN)
2010			udf_warn(sb, "No anchor found\n");
2011		return ret;
2012	}
2013	return 0;
2014}
2015
2016static void udf_finalize_lvid(struct logicalVolIntegrityDesc *lvid)
2017{
2018	struct timespec64 ts;
2019
2020	ktime_get_real_ts64(&ts);
2021	udf_time_to_disk_stamp(&lvid->recordingDateAndTime, ts);
2022	lvid->descTag.descCRC = cpu_to_le16(
2023		crc_itu_t(0, (char *)lvid + sizeof(struct tag),
2024			le16_to_cpu(lvid->descTag.descCRCLength)));
2025	lvid->descTag.tagChecksum = udf_tag_checksum(&lvid->descTag);
2026}
2027
2028static void udf_open_lvid(struct super_block *sb)
2029{
2030	struct udf_sb_info *sbi = UDF_SB(sb);
2031	struct buffer_head *bh = sbi->s_lvid_bh;
2032	struct logicalVolIntegrityDesc *lvid;
2033	struct logicalVolIntegrityDescImpUse *lvidiu;
2034
2035	if (!bh)
2036		return;
2037	lvid = (struct logicalVolIntegrityDesc *)bh->b_data;
2038	lvidiu = udf_sb_lvidiu(sb);
2039	if (!lvidiu)
2040		return;
2041
2042	mutex_lock(&sbi->s_alloc_mutex);
2043	lvidiu->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
2044	lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
2045	if (le32_to_cpu(lvid->integrityType) == LVID_INTEGRITY_TYPE_CLOSE)
2046		lvid->integrityType = cpu_to_le32(LVID_INTEGRITY_TYPE_OPEN);
2047	else
2048		UDF_SET_FLAG(sb, UDF_FLAG_INCONSISTENT);
 
 
 
2049
2050	udf_finalize_lvid(lvid);
2051	mark_buffer_dirty(bh);
2052	sbi->s_lvid_dirty = 0;
2053	mutex_unlock(&sbi->s_alloc_mutex);
2054	/* Make opening of filesystem visible on the media immediately */
2055	sync_dirty_buffer(bh);
2056}
2057
2058static void udf_close_lvid(struct super_block *sb)
2059{
2060	struct udf_sb_info *sbi = UDF_SB(sb);
2061	struct buffer_head *bh = sbi->s_lvid_bh;
2062	struct logicalVolIntegrityDesc *lvid;
2063	struct logicalVolIntegrityDescImpUse *lvidiu;
2064
2065	if (!bh)
2066		return;
2067	lvid = (struct logicalVolIntegrityDesc *)bh->b_data;
2068	lvidiu = udf_sb_lvidiu(sb);
2069	if (!lvidiu)
2070		return;
2071
2072	mutex_lock(&sbi->s_alloc_mutex);
2073	lvidiu->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
2074	lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
 
2075	if (UDF_MAX_WRITE_VERSION > le16_to_cpu(lvidiu->maxUDFWriteRev))
2076		lvidiu->maxUDFWriteRev = cpu_to_le16(UDF_MAX_WRITE_VERSION);
2077	if (sbi->s_udfrev > le16_to_cpu(lvidiu->minUDFReadRev))
2078		lvidiu->minUDFReadRev = cpu_to_le16(sbi->s_udfrev);
2079	if (sbi->s_udfrev > le16_to_cpu(lvidiu->minUDFWriteRev))
2080		lvidiu->minUDFWriteRev = cpu_to_le16(sbi->s_udfrev);
2081	if (!UDF_QUERY_FLAG(sb, UDF_FLAG_INCONSISTENT))
2082		lvid->integrityType = cpu_to_le32(LVID_INTEGRITY_TYPE_CLOSE);
 
 
 
2083
 
2084	/*
2085	 * We set buffer uptodate unconditionally here to avoid spurious
2086	 * warnings from mark_buffer_dirty() when previous EIO has marked
2087	 * the buffer as !uptodate
2088	 */
2089	set_buffer_uptodate(bh);
2090	udf_finalize_lvid(lvid);
2091	mark_buffer_dirty(bh);
2092	sbi->s_lvid_dirty = 0;
2093	mutex_unlock(&sbi->s_alloc_mutex);
2094	/* Make closing of filesystem visible on the media immediately */
2095	sync_dirty_buffer(bh);
2096}
2097
2098u64 lvid_get_unique_id(struct super_block *sb)
2099{
2100	struct buffer_head *bh;
2101	struct udf_sb_info *sbi = UDF_SB(sb);
2102	struct logicalVolIntegrityDesc *lvid;
2103	struct logicalVolHeaderDesc *lvhd;
2104	u64 uniqueID;
2105	u64 ret;
2106
2107	bh = sbi->s_lvid_bh;
2108	if (!bh)
2109		return 0;
2110
2111	lvid = (struct logicalVolIntegrityDesc *)bh->b_data;
2112	lvhd = (struct logicalVolHeaderDesc *)lvid->logicalVolContentsUse;
2113
2114	mutex_lock(&sbi->s_alloc_mutex);
2115	ret = uniqueID = le64_to_cpu(lvhd->uniqueID);
2116	if (!(++uniqueID & 0xFFFFFFFF))
2117		uniqueID += 16;
2118	lvhd->uniqueID = cpu_to_le64(uniqueID);
2119	udf_updated_lvid(sb);
2120	mutex_unlock(&sbi->s_alloc_mutex);
 
2121
2122	return ret;
2123}
2124
2125static int udf_fill_super(struct super_block *sb, void *options, int silent)
2126{
2127	int ret = -EINVAL;
2128	struct inode *inode = NULL;
2129	struct udf_options uopt;
2130	struct kernel_lb_addr rootdir, fileset;
2131	struct udf_sb_info *sbi;
2132	bool lvid_open = false;
2133
2134	uopt.flags = (1 << UDF_FLAG_USE_AD_IN_ICB) | (1 << UDF_FLAG_STRICT);
2135	/* By default we'll use overflow[ug]id when UDF inode [ug]id == -1 */
2136	uopt.uid = make_kuid(current_user_ns(), overflowuid);
2137	uopt.gid = make_kgid(current_user_ns(), overflowgid);
2138	uopt.umask = 0;
2139	uopt.fmode = UDF_INVALID_MODE;
2140	uopt.dmode = UDF_INVALID_MODE;
2141	uopt.nls_map = NULL;
2142
2143	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
2144	if (!sbi)
2145		return -ENOMEM;
2146
2147	sb->s_fs_info = sbi;
2148
2149	mutex_init(&sbi->s_alloc_mutex);
2150
2151	if (!udf_parse_options((char *)options, &uopt, false))
2152		goto parse_options_failure;
2153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2154	fileset.logicalBlockNum = 0xFFFFFFFF;
2155	fileset.partitionReferenceNum = 0xFFFF;
2156
2157	sbi->s_flags = uopt.flags;
2158	sbi->s_uid = uopt.uid;
2159	sbi->s_gid = uopt.gid;
2160	sbi->s_umask = uopt.umask;
2161	sbi->s_fmode = uopt.fmode;
2162	sbi->s_dmode = uopt.dmode;
2163	sbi->s_nls_map = uopt.nls_map;
2164	rwlock_init(&sbi->s_cred_lock);
2165
2166	if (uopt.session == 0xFFFFFFFF)
2167		sbi->s_session = udf_get_last_session(sb);
2168	else
2169		sbi->s_session = uopt.session;
2170
2171	udf_debug("Multi-session=%d\n", sbi->s_session);
2172
2173	/* Fill in the rest of the superblock */
2174	sb->s_op = &udf_sb_ops;
2175	sb->s_export_op = &udf_export_ops;
2176
2177	sb->s_magic = UDF_SUPER_MAGIC;
2178	sb->s_time_gran = 1000;
2179
2180	if (uopt.flags & (1 << UDF_FLAG_BLOCKSIZE_SET)) {
2181		ret = udf_load_vrs(sb, &uopt, silent, &fileset);
2182	} else {
2183		uopt.blocksize = bdev_logical_block_size(sb->s_bdev);
2184		while (uopt.blocksize <= 4096) {
 
 
 
 
 
 
 
2185			ret = udf_load_vrs(sb, &uopt, silent, &fileset);
2186			if (ret < 0) {
2187				if (!silent && ret != -EACCES) {
2188					pr_notice("Scanning with blocksize %u failed\n",
2189						  uopt.blocksize);
2190				}
2191				brelse(sbi->s_lvid_bh);
2192				sbi->s_lvid_bh = NULL;
2193				/*
2194				 * EACCES is special - we want to propagate to
2195				 * upper layers that we cannot handle RW mount.
2196				 */
2197				if (ret == -EACCES)
2198					break;
2199			} else
2200				break;
2201
2202			uopt.blocksize <<= 1;
2203		}
2204	}
2205	if (ret < 0) {
2206		if (ret == -EAGAIN) {
2207			udf_warn(sb, "No partition found (1)\n");
2208			ret = -EINVAL;
2209		}
2210		goto error_out;
2211	}
2212
2213	udf_debug("Lastblock=%u\n", sbi->s_last_block);
2214
2215	if (sbi->s_lvid_bh) {
2216		struct logicalVolIntegrityDescImpUse *lvidiu =
2217							udf_sb_lvidiu(sb);
2218		uint16_t minUDFReadRev;
2219		uint16_t minUDFWriteRev;
2220
2221		if (!lvidiu) {
2222			ret = -EINVAL;
2223			goto error_out;
2224		}
2225		minUDFReadRev = le16_to_cpu(lvidiu->minUDFReadRev);
2226		minUDFWriteRev = le16_to_cpu(lvidiu->minUDFWriteRev);
2227		if (minUDFReadRev > UDF_MAX_READ_VERSION) {
2228			udf_err(sb, "minUDFReadRev=%x (max is %x)\n",
2229				minUDFReadRev,
2230				UDF_MAX_READ_VERSION);
2231			ret = -EINVAL;
2232			goto error_out;
2233		} else if (minUDFWriteRev > UDF_MAX_WRITE_VERSION) {
2234			if (!sb_rdonly(sb)) {
2235				ret = -EACCES;
2236				goto error_out;
2237			}
2238			UDF_SET_FLAG(sb, UDF_FLAG_RW_INCOMPAT);
2239		}
2240
2241		sbi->s_udfrev = minUDFWriteRev;
2242
2243		if (minUDFReadRev >= UDF_VERS_USE_EXTENDED_FE)
2244			UDF_SET_FLAG(sb, UDF_FLAG_USE_EXTENDED_FE);
2245		if (minUDFReadRev >= UDF_VERS_USE_STREAMS)
2246			UDF_SET_FLAG(sb, UDF_FLAG_USE_STREAMS);
2247	}
2248
2249	if (!sbi->s_partitions) {
2250		udf_warn(sb, "No partition found (2)\n");
2251		ret = -EINVAL;
2252		goto error_out;
2253	}
2254
2255	if (sbi->s_partmaps[sbi->s_partition].s_partition_flags &
2256			UDF_PART_FLAG_READ_ONLY) {
2257		if (!sb_rdonly(sb)) {
2258			ret = -EACCES;
2259			goto error_out;
2260		}
2261		UDF_SET_FLAG(sb, UDF_FLAG_RW_INCOMPAT);
2262	}
2263
2264	ret = udf_find_fileset(sb, &fileset, &rootdir);
2265	if (ret < 0) {
2266		udf_warn(sb, "No fileset found\n");
 
2267		goto error_out;
2268	}
2269
2270	if (!silent) {
2271		struct timestamp ts;
2272		udf_time_to_disk_stamp(&ts, sbi->s_record_time);
2273		udf_info("Mounting volume '%s', timestamp %04u/%02u/%02u %02u:%02u (%x)\n",
2274			 sbi->s_volume_ident,
2275			 le16_to_cpu(ts.year), ts.month, ts.day,
2276			 ts.hour, ts.minute, le16_to_cpu(ts.typeAndTimezone));
2277	}
2278	if (!sb_rdonly(sb)) {
2279		udf_open_lvid(sb);
2280		lvid_open = true;
2281	}
2282
2283	/* Assign the root inode */
2284	/* assign inodes by physical block number */
2285	/* perhaps it's not extensible enough, but for now ... */
2286	inode = udf_iget(sb, &rootdir);
2287	if (IS_ERR(inode)) {
2288		udf_err(sb, "Error in udf_iget, block=%u, partition=%u\n",
2289		       rootdir.logicalBlockNum, rootdir.partitionReferenceNum);
2290		ret = PTR_ERR(inode);
2291		goto error_out;
2292	}
2293
2294	/* Allocate a dentry for the root inode */
2295	sb->s_root = d_make_root(inode);
2296	if (!sb->s_root) {
2297		udf_err(sb, "Couldn't allocate root dentry\n");
2298		ret = -ENOMEM;
2299		goto error_out;
2300	}
2301	sb->s_maxbytes = MAX_LFS_FILESIZE;
2302	sb->s_max_links = UDF_MAX_LINKS;
2303	return 0;
2304
2305error_out:
2306	iput(sbi->s_vat_inode);
2307parse_options_failure:
2308	unload_nls(uopt.nls_map);
 
 
 
2309	if (lvid_open)
2310		udf_close_lvid(sb);
2311	brelse(sbi->s_lvid_bh);
2312	udf_sb_free_partitions(sb);
2313	kfree(sbi);
2314	sb->s_fs_info = NULL;
2315
2316	return ret;
2317}
2318
2319void _udf_err(struct super_block *sb, const char *function,
2320	      const char *fmt, ...)
2321{
2322	struct va_format vaf;
2323	va_list args;
2324
2325	va_start(args, fmt);
2326
2327	vaf.fmt = fmt;
2328	vaf.va = &args;
2329
2330	pr_err("error (device %s): %s: %pV", sb->s_id, function, &vaf);
2331
2332	va_end(args);
2333}
2334
2335void _udf_warn(struct super_block *sb, const char *function,
2336	       const char *fmt, ...)
2337{
2338	struct va_format vaf;
2339	va_list args;
2340
2341	va_start(args, fmt);
2342
2343	vaf.fmt = fmt;
2344	vaf.va = &args;
2345
2346	pr_warn("warning (device %s): %s: %pV", sb->s_id, function, &vaf);
2347
2348	va_end(args);
2349}
2350
2351static void udf_put_super(struct super_block *sb)
2352{
2353	struct udf_sb_info *sbi;
2354
2355	sbi = UDF_SB(sb);
2356
2357	iput(sbi->s_vat_inode);
2358	unload_nls(sbi->s_nls_map);
2359	if (!sb_rdonly(sb))
 
 
 
2360		udf_close_lvid(sb);
2361	brelse(sbi->s_lvid_bh);
2362	udf_sb_free_partitions(sb);
2363	mutex_destroy(&sbi->s_alloc_mutex);
2364	kfree(sb->s_fs_info);
2365	sb->s_fs_info = NULL;
2366}
2367
2368static int udf_sync_fs(struct super_block *sb, int wait)
2369{
2370	struct udf_sb_info *sbi = UDF_SB(sb);
2371
2372	mutex_lock(&sbi->s_alloc_mutex);
2373	if (sbi->s_lvid_dirty) {
2374		struct buffer_head *bh = sbi->s_lvid_bh;
2375		struct logicalVolIntegrityDesc *lvid;
2376
2377		lvid = (struct logicalVolIntegrityDesc *)bh->b_data;
2378		udf_finalize_lvid(lvid);
2379
2380		/*
2381		 * Blockdevice will be synced later so we don't have to submit
2382		 * the buffer for IO
2383		 */
2384		mark_buffer_dirty(bh);
2385		sbi->s_lvid_dirty = 0;
2386	}
2387	mutex_unlock(&sbi->s_alloc_mutex);
2388
2389	return 0;
2390}
2391
2392static int udf_statfs(struct dentry *dentry, struct kstatfs *buf)
2393{
2394	struct super_block *sb = dentry->d_sb;
2395	struct udf_sb_info *sbi = UDF_SB(sb);
2396	struct logicalVolIntegrityDescImpUse *lvidiu;
2397	u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
2398
2399	lvidiu = udf_sb_lvidiu(sb);
2400	buf->f_type = UDF_SUPER_MAGIC;
2401	buf->f_bsize = sb->s_blocksize;
2402	buf->f_blocks = sbi->s_partmaps[sbi->s_partition].s_partition_len;
2403	buf->f_bfree = udf_count_free(sb);
2404	buf->f_bavail = buf->f_bfree;
2405	/*
2406	 * Let's pretend each free block is also a free 'inode' since UDF does
2407	 * not have separate preallocated table of inodes.
2408	 */
2409	buf->f_files = (lvidiu != NULL ? (le32_to_cpu(lvidiu->numFiles) +
2410					  le32_to_cpu(lvidiu->numDirs)) : 0)
2411			+ buf->f_bfree;
2412	buf->f_ffree = buf->f_bfree;
2413	buf->f_namelen = UDF_NAME_LEN;
2414	buf->f_fsid = u64_to_fsid(id);
 
2415
2416	return 0;
2417}
2418
2419static unsigned int udf_count_free_bitmap(struct super_block *sb,
2420					  struct udf_bitmap *bitmap)
2421{
2422	struct buffer_head *bh = NULL;
2423	unsigned int accum = 0;
2424	int index;
2425	udf_pblk_t block = 0, newblock;
2426	struct kernel_lb_addr loc;
2427	uint32_t bytes;
2428	uint8_t *ptr;
2429	uint16_t ident;
2430	struct spaceBitmapDesc *bm;
2431
2432	loc.logicalBlockNum = bitmap->s_extPosition;
2433	loc.partitionReferenceNum = UDF_SB(sb)->s_partition;
2434	bh = udf_read_ptagged(sb, &loc, 0, &ident);
2435
2436	if (!bh) {
2437		udf_err(sb, "udf_count_free failed\n");
2438		goto out;
2439	} else if (ident != TAG_IDENT_SBD) {
2440		brelse(bh);
2441		udf_err(sb, "udf_count_free failed\n");
2442		goto out;
2443	}
2444
2445	bm = (struct spaceBitmapDesc *)bh->b_data;
2446	bytes = le32_to_cpu(bm->numOfBytes);
2447	index = sizeof(struct spaceBitmapDesc); /* offset in first block only */
2448	ptr = (uint8_t *)bh->b_data;
2449
2450	while (bytes > 0) {
2451		u32 cur_bytes = min_t(u32, bytes, sb->s_blocksize - index);
2452		accum += bitmap_weight((const unsigned long *)(ptr + index),
2453					cur_bytes * 8);
2454		bytes -= cur_bytes;
2455		if (bytes) {
2456			brelse(bh);
2457			newblock = udf_get_lb_pblock(sb, &loc, ++block);
2458			bh = udf_tread(sb, newblock);
2459			if (!bh) {
2460				udf_debug("read failed\n");
2461				goto out;
2462			}
2463			index = 0;
2464			ptr = (uint8_t *)bh->b_data;
2465		}
2466	}
2467	brelse(bh);
2468out:
2469	return accum;
2470}
2471
2472static unsigned int udf_count_free_table(struct super_block *sb,
2473					 struct inode *table)
2474{
2475	unsigned int accum = 0;
2476	uint32_t elen;
2477	struct kernel_lb_addr eloc;
2478	int8_t etype;
2479	struct extent_position epos;
2480
2481	mutex_lock(&UDF_SB(sb)->s_alloc_mutex);
2482	epos.block = UDF_I(table)->i_location;
2483	epos.offset = sizeof(struct unallocSpaceEntry);
2484	epos.bh = NULL;
2485
2486	while ((etype = udf_next_aext(table, &epos, &eloc, &elen, 1)) != -1)
2487		accum += (elen >> table->i_sb->s_blocksize_bits);
2488
2489	brelse(epos.bh);
2490	mutex_unlock(&UDF_SB(sb)->s_alloc_mutex);
2491
2492	return accum;
2493}
2494
2495static unsigned int udf_count_free(struct super_block *sb)
2496{
2497	unsigned int accum = 0;
2498	struct udf_sb_info *sbi = UDF_SB(sb);
2499	struct udf_part_map *map;
2500	unsigned int part = sbi->s_partition;
2501	int ptype = sbi->s_partmaps[part].s_partition_type;
2502
2503	if (ptype == UDF_METADATA_MAP25) {
2504		part = sbi->s_partmaps[part].s_type_specific.s_metadata.
2505							s_phys_partition_ref;
2506	} else if (ptype == UDF_VIRTUAL_MAP15 || ptype == UDF_VIRTUAL_MAP20) {
2507		/*
2508		 * Filesystems with VAT are append-only and we cannot write to
2509 		 * them. Let's just report 0 here.
2510		 */
2511		return 0;
2512	}
2513
 
2514	if (sbi->s_lvid_bh) {
2515		struct logicalVolIntegrityDesc *lvid =
2516			(struct logicalVolIntegrityDesc *)
2517			sbi->s_lvid_bh->b_data;
2518		if (le32_to_cpu(lvid->numOfPartitions) > part) {
2519			accum = le32_to_cpu(
2520					lvid->freeSpaceTable[part]);
2521			if (accum == 0xFFFFFFFF)
2522				accum = 0;
2523		}
2524	}
2525
2526	if (accum)
2527		return accum;
2528
2529	map = &sbi->s_partmaps[part];
2530	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP) {
2531		accum += udf_count_free_bitmap(sb,
2532					       map->s_uspace.s_bitmap);
2533	}
 
 
 
 
2534	if (accum)
2535		return accum;
2536
2537	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE) {
2538		accum += udf_count_free_table(sb,
2539					      map->s_uspace.s_table);
2540	}
 
 
 
 
 
2541	return accum;
2542}
2543
2544MODULE_AUTHOR("Ben Fennema");
2545MODULE_DESCRIPTION("Universal Disk Format Filesystem");
2546MODULE_LICENSE("GPL");
2547module_init(init_udf_fs)
2548module_exit(exit_udf_fs)
v4.10.11
   1/*
   2 * super.c
   3 *
   4 * PURPOSE
   5 *  Super block routines for the OSTA-UDF(tm) filesystem.
   6 *
   7 * DESCRIPTION
   8 *  OSTA-UDF(tm) = Optical Storage Technology Association
   9 *  Universal Disk Format.
  10 *
  11 *  This code is based on version 2.00 of the UDF specification,
  12 *  and revision 3 of the ECMA 167 standard [equivalent to ISO 13346].
  13 *    http://www.osta.org/
  14 *    http://www.ecma.ch/
  15 *    http://www.iso.org/
  16 *
  17 * COPYRIGHT
  18 *  This file is distributed under the terms of the GNU General Public
  19 *  License (GPL). Copies of the GPL can be obtained from:
  20 *    ftp://prep.ai.mit.edu/pub/gnu/GPL
  21 *  Each contributing author retains all rights to their own work.
  22 *
  23 *  (C) 1998 Dave Boynton
  24 *  (C) 1998-2004 Ben Fennema
  25 *  (C) 2000 Stelias Computing Inc
  26 *
  27 * HISTORY
  28 *
  29 *  09/24/98 dgb  changed to allow compiling outside of kernel, and
  30 *                added some debugging.
  31 *  10/01/98 dgb  updated to allow (some) possibility of compiling w/2.0.34
  32 *  10/16/98      attempting some multi-session support
  33 *  10/17/98      added freespace count for "df"
  34 *  11/11/98 gr   added novrs option
  35 *  11/26/98 dgb  added fileset,anchor mount options
  36 *  12/06/98 blf  really hosed things royally. vat/sparing support. sequenced
  37 *                vol descs. rewrote option handling based on isofs
  38 *  12/20/98      find the free space bitmap (if it exists)
  39 */
  40
  41#include "udfdecl.h"
  42
  43#include <linux/blkdev.h>
  44#include <linux/slab.h>
  45#include <linux/kernel.h>
  46#include <linux/module.h>
  47#include <linux/parser.h>
  48#include <linux/stat.h>
  49#include <linux/cdrom.h>
  50#include <linux/nls.h>
  51#include <linux/vfs.h>
  52#include <linux/vmalloc.h>
  53#include <linux/errno.h>
  54#include <linux/mount.h>
  55#include <linux/seq_file.h>
  56#include <linux/bitmap.h>
  57#include <linux/crc-itu-t.h>
  58#include <linux/log2.h>
  59#include <asm/byteorder.h>
  60
  61#include "udf_sb.h"
  62#include "udf_i.h"
  63
  64#include <linux/init.h>
  65#include <linux/uaccess.h>
  66
  67#define VDS_POS_PRIMARY_VOL_DESC	0
  68#define VDS_POS_UNALLOC_SPACE_DESC	1
  69#define VDS_POS_LOGICAL_VOL_DESC	2
  70#define VDS_POS_PARTITION_DESC		3
  71#define VDS_POS_IMP_USE_VOL_DESC	4
  72#define VDS_POS_VOL_DESC_PTR		5
  73#define VDS_POS_TERMINATING_DESC	6
  74#define VDS_POS_LENGTH			7
  75
  76#define UDF_DEFAULT_BLOCKSIZE 2048
  77
  78#define VSD_FIRST_SECTOR_OFFSET		32768
  79#define VSD_MAX_SECTOR_OFFSET		0x800000
  80
  81/*
  82 * Maximum number of Terminating Descriptor / Logical Volume Integrity
  83 * Descriptor redirections. The chosen numbers are arbitrary - just that we
  84 * hopefully don't limit any real use of rewritten inode on write-once media
  85 * but avoid looping for too long on corrupted media.
  86 */
  87#define UDF_MAX_TD_NESTING 64
  88#define UDF_MAX_LVID_NESTING 1000
  89
  90enum { UDF_MAX_LINKS = 0xffff };
  91
  92/* These are the "meat" - everything else is stuffing */
  93static int udf_fill_super(struct super_block *, void *, int);
  94static void udf_put_super(struct super_block *);
  95static int udf_sync_fs(struct super_block *, int);
  96static int udf_remount_fs(struct super_block *, int *, char *);
  97static void udf_load_logicalvolint(struct super_block *, struct kernel_extent_ad);
  98static int udf_find_fileset(struct super_block *, struct kernel_lb_addr *,
  99			    struct kernel_lb_addr *);
 100static void udf_load_fileset(struct super_block *, struct buffer_head *,
 101			     struct kernel_lb_addr *);
 102static void udf_open_lvid(struct super_block *);
 103static void udf_close_lvid(struct super_block *);
 104static unsigned int udf_count_free(struct super_block *);
 105static int udf_statfs(struct dentry *, struct kstatfs *);
 106static int udf_show_options(struct seq_file *, struct dentry *);
 107
 108struct logicalVolIntegrityDescImpUse *udf_sb_lvidiu(struct super_block *sb)
 109{
 110	struct logicalVolIntegrityDesc *lvid;
 111	unsigned int partnum;
 112	unsigned int offset;
 113
 114	if (!UDF_SB(sb)->s_lvid_bh)
 115		return NULL;
 116	lvid = (struct logicalVolIntegrityDesc *)UDF_SB(sb)->s_lvid_bh->b_data;
 117	partnum = le32_to_cpu(lvid->numOfPartitions);
 118	if ((sb->s_blocksize - sizeof(struct logicalVolIntegrityDescImpUse) -
 119	     offsetof(struct logicalVolIntegrityDesc, impUse)) /
 120	     (2 * sizeof(uint32_t)) < partnum) {
 121		udf_err(sb, "Logical volume integrity descriptor corrupted "
 122			"(numOfPartitions = %u)!\n", partnum);
 123		return NULL;
 124	}
 125	/* The offset is to skip freeSpaceTable and sizeTable arrays */
 126	offset = partnum * 2 * sizeof(uint32_t);
 127	return (struct logicalVolIntegrityDescImpUse *)&(lvid->impUse[offset]);
 
 128}
 129
 130/* UDF filesystem type */
 131static struct dentry *udf_mount(struct file_system_type *fs_type,
 132		      int flags, const char *dev_name, void *data)
 133{
 134	return mount_bdev(fs_type, flags, dev_name, data, udf_fill_super);
 135}
 136
 137static struct file_system_type udf_fstype = {
 138	.owner		= THIS_MODULE,
 139	.name		= "udf",
 140	.mount		= udf_mount,
 141	.kill_sb	= kill_block_super,
 142	.fs_flags	= FS_REQUIRES_DEV,
 143};
 144MODULE_ALIAS_FS("udf");
 145
 146static struct kmem_cache *udf_inode_cachep;
 147
 148static struct inode *udf_alloc_inode(struct super_block *sb)
 149{
 150	struct udf_inode_info *ei;
 151	ei = kmem_cache_alloc(udf_inode_cachep, GFP_KERNEL);
 152	if (!ei)
 153		return NULL;
 154
 155	ei->i_unique = 0;
 156	ei->i_lenExtents = 0;
 
 157	ei->i_next_alloc_block = 0;
 158	ei->i_next_alloc_goal = 0;
 159	ei->i_strat4096 = 0;
 
 160	init_rwsem(&ei->i_data_sem);
 161	ei->cached_extent.lstart = -1;
 162	spin_lock_init(&ei->i_extent_cache_lock);
 163
 164	return &ei->vfs_inode;
 165}
 166
 167static void udf_i_callback(struct rcu_head *head)
 168{
 169	struct inode *inode = container_of(head, struct inode, i_rcu);
 170	kmem_cache_free(udf_inode_cachep, UDF_I(inode));
 171}
 172
 173static void udf_destroy_inode(struct inode *inode)
 174{
 175	call_rcu(&inode->i_rcu, udf_i_callback);
 176}
 177
 178static void init_once(void *foo)
 179{
 180	struct udf_inode_info *ei = (struct udf_inode_info *)foo;
 181
 182	ei->i_ext.i_data = NULL;
 183	inode_init_once(&ei->vfs_inode);
 184}
 185
 186static int __init init_inodecache(void)
 187{
 188	udf_inode_cachep = kmem_cache_create("udf_inode_cache",
 189					     sizeof(struct udf_inode_info),
 190					     0, (SLAB_RECLAIM_ACCOUNT |
 191						 SLAB_MEM_SPREAD |
 192						 SLAB_ACCOUNT),
 193					     init_once);
 194	if (!udf_inode_cachep)
 195		return -ENOMEM;
 196	return 0;
 197}
 198
 199static void destroy_inodecache(void)
 200{
 201	/*
 202	 * Make sure all delayed rcu free inodes are flushed before we
 203	 * destroy cache.
 204	 */
 205	rcu_barrier();
 206	kmem_cache_destroy(udf_inode_cachep);
 207}
 208
 209/* Superblock operations */
 210static const struct super_operations udf_sb_ops = {
 211	.alloc_inode	= udf_alloc_inode,
 212	.destroy_inode	= udf_destroy_inode,
 213	.write_inode	= udf_write_inode,
 214	.evict_inode	= udf_evict_inode,
 215	.put_super	= udf_put_super,
 216	.sync_fs	= udf_sync_fs,
 217	.statfs		= udf_statfs,
 218	.remount_fs	= udf_remount_fs,
 219	.show_options	= udf_show_options,
 220};
 221
 222struct udf_options {
 223	unsigned char novrs;
 224	unsigned int blocksize;
 225	unsigned int session;
 226	unsigned int lastblock;
 227	unsigned int anchor;
 228	unsigned int volume;
 229	unsigned short partition;
 230	unsigned int fileset;
 231	unsigned int rootdir;
 232	unsigned int flags;
 233	umode_t umask;
 234	kgid_t gid;
 235	kuid_t uid;
 236	umode_t fmode;
 237	umode_t dmode;
 238	struct nls_table *nls_map;
 239};
 240
 241static int __init init_udf_fs(void)
 242{
 243	int err;
 244
 245	err = init_inodecache();
 246	if (err)
 247		goto out1;
 248	err = register_filesystem(&udf_fstype);
 249	if (err)
 250		goto out;
 251
 252	return 0;
 253
 254out:
 255	destroy_inodecache();
 256
 257out1:
 258	return err;
 259}
 260
 261static void __exit exit_udf_fs(void)
 262{
 263	unregister_filesystem(&udf_fstype);
 264	destroy_inodecache();
 265}
 266
 267module_init(init_udf_fs)
 268module_exit(exit_udf_fs)
 269
 270static int udf_sb_alloc_partition_maps(struct super_block *sb, u32 count)
 271{
 272	struct udf_sb_info *sbi = UDF_SB(sb);
 273
 274	sbi->s_partmaps = kcalloc(count, sizeof(struct udf_part_map),
 275				  GFP_KERNEL);
 276	if (!sbi->s_partmaps) {
 277		udf_err(sb, "Unable to allocate space for %d partition maps\n",
 278			count);
 279		sbi->s_partitions = 0;
 280		return -ENOMEM;
 281	}
 282
 283	sbi->s_partitions = count;
 284	return 0;
 285}
 286
 287static void udf_sb_free_bitmap(struct udf_bitmap *bitmap)
 288{
 289	int i;
 290	int nr_groups = bitmap->s_nr_groups;
 291
 292	for (i = 0; i < nr_groups; i++)
 293		if (bitmap->s_block_bitmap[i])
 294			brelse(bitmap->s_block_bitmap[i]);
 295
 296	kvfree(bitmap);
 297}
 298
 299static void udf_free_partition(struct udf_part_map *map)
 300{
 301	int i;
 302	struct udf_meta_data *mdata;
 303
 304	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE)
 305		iput(map->s_uspace.s_table);
 306	if (map->s_partition_flags & UDF_PART_FLAG_FREED_TABLE)
 307		iput(map->s_fspace.s_table);
 308	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP)
 309		udf_sb_free_bitmap(map->s_uspace.s_bitmap);
 310	if (map->s_partition_flags & UDF_PART_FLAG_FREED_BITMAP)
 311		udf_sb_free_bitmap(map->s_fspace.s_bitmap);
 312	if (map->s_partition_type == UDF_SPARABLE_MAP15)
 313		for (i = 0; i < 4; i++)
 314			brelse(map->s_type_specific.s_sparing.s_spar_map[i]);
 315	else if (map->s_partition_type == UDF_METADATA_MAP25) {
 316		mdata = &map->s_type_specific.s_metadata;
 317		iput(mdata->s_metadata_fe);
 318		mdata->s_metadata_fe = NULL;
 319
 320		iput(mdata->s_mirror_fe);
 321		mdata->s_mirror_fe = NULL;
 322
 323		iput(mdata->s_bitmap_fe);
 324		mdata->s_bitmap_fe = NULL;
 325	}
 326}
 327
 328static void udf_sb_free_partitions(struct super_block *sb)
 329{
 330	struct udf_sb_info *sbi = UDF_SB(sb);
 331	int i;
 332	if (sbi->s_partmaps == NULL)
 
 333		return;
 334	for (i = 0; i < sbi->s_partitions; i++)
 335		udf_free_partition(&sbi->s_partmaps[i]);
 336	kfree(sbi->s_partmaps);
 337	sbi->s_partmaps = NULL;
 338}
 339
 340static int udf_show_options(struct seq_file *seq, struct dentry *root)
 341{
 342	struct super_block *sb = root->d_sb;
 343	struct udf_sb_info *sbi = UDF_SB(sb);
 344
 345	if (!UDF_QUERY_FLAG(sb, UDF_FLAG_STRICT))
 346		seq_puts(seq, ",nostrict");
 347	if (UDF_QUERY_FLAG(sb, UDF_FLAG_BLOCKSIZE_SET))
 348		seq_printf(seq, ",bs=%lu", sb->s_blocksize);
 349	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UNHIDE))
 350		seq_puts(seq, ",unhide");
 351	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UNDELETE))
 352		seq_puts(seq, ",undelete");
 353	if (!UDF_QUERY_FLAG(sb, UDF_FLAG_USE_AD_IN_ICB))
 354		seq_puts(seq, ",noadinicb");
 355	if (UDF_QUERY_FLAG(sb, UDF_FLAG_USE_SHORT_AD))
 356		seq_puts(seq, ",shortad");
 357	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UID_FORGET))
 358		seq_puts(seq, ",uid=forget");
 359	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UID_IGNORE))
 360		seq_puts(seq, ",uid=ignore");
 361	if (UDF_QUERY_FLAG(sb, UDF_FLAG_GID_FORGET))
 362		seq_puts(seq, ",gid=forget");
 363	if (UDF_QUERY_FLAG(sb, UDF_FLAG_GID_IGNORE))
 364		seq_puts(seq, ",gid=ignore");
 365	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UID_SET))
 366		seq_printf(seq, ",uid=%u", from_kuid(&init_user_ns, sbi->s_uid));
 367	if (UDF_QUERY_FLAG(sb, UDF_FLAG_GID_SET))
 368		seq_printf(seq, ",gid=%u", from_kgid(&init_user_ns, sbi->s_gid));
 369	if (sbi->s_umask != 0)
 370		seq_printf(seq, ",umask=%ho", sbi->s_umask);
 371	if (sbi->s_fmode != UDF_INVALID_MODE)
 372		seq_printf(seq, ",mode=%ho", sbi->s_fmode);
 373	if (sbi->s_dmode != UDF_INVALID_MODE)
 374		seq_printf(seq, ",dmode=%ho", sbi->s_dmode);
 375	if (UDF_QUERY_FLAG(sb, UDF_FLAG_SESSION_SET))
 376		seq_printf(seq, ",session=%u", sbi->s_session);
 377	if (UDF_QUERY_FLAG(sb, UDF_FLAG_LASTBLOCK_SET))
 378		seq_printf(seq, ",lastblock=%u", sbi->s_last_block);
 379	if (sbi->s_anchor != 0)
 380		seq_printf(seq, ",anchor=%u", sbi->s_anchor);
 381	/*
 382	 * volume, partition, fileset and rootdir seem to be ignored
 383	 * currently
 384	 */
 385	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UTF8))
 386		seq_puts(seq, ",utf8");
 387	if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP) && sbi->s_nls_map)
 388		seq_printf(seq, ",iocharset=%s", sbi->s_nls_map->charset);
 
 
 389
 390	return 0;
 391}
 392
 393/*
 394 * udf_parse_options
 395 *
 396 * PURPOSE
 397 *	Parse mount options.
 398 *
 399 * DESCRIPTION
 400 *	The following mount options are supported:
 401 *
 402 *	gid=		Set the default group.
 403 *	umask=		Set the default umask.
 404 *	mode=		Set the default file permissions.
 405 *	dmode=		Set the default directory permissions.
 406 *	uid=		Set the default user.
 407 *	bs=		Set the block size.
 408 *	unhide		Show otherwise hidden files.
 409 *	undelete	Show deleted files in lists.
 410 *	adinicb		Embed data in the inode (default)
 411 *	noadinicb	Don't embed data in the inode
 412 *	shortad		Use short ad's
 413 *	longad		Use long ad's (default)
 414 *	nostrict	Unset strict conformance
 415 *	iocharset=	Set the NLS character set
 416 *
 417 *	The remaining are for debugging and disaster recovery:
 418 *
 419 *	novrs		Skip volume sequence recognition
 420 *
 421 *	The following expect a offset from 0.
 422 *
 423 *	session=	Set the CDROM session (default= last session)
 424 *	anchor=		Override standard anchor location. (default= 256)
 425 *	volume=		Override the VolumeDesc location. (unused)
 426 *	partition=	Override the PartitionDesc location. (unused)
 427 *	lastblock=	Set the last block of the filesystem/
 428 *
 429 *	The following expect a offset from the partition root.
 430 *
 431 *	fileset=	Override the fileset block location. (unused)
 432 *	rootdir=	Override the root directory location. (unused)
 433 *		WARNING: overriding the rootdir to a non-directory may
 434 *		yield highly unpredictable results.
 435 *
 436 * PRE-CONDITIONS
 437 *	options		Pointer to mount options string.
 438 *	uopts		Pointer to mount options variable.
 439 *
 440 * POST-CONDITIONS
 441 *	<return>	1	Mount options parsed okay.
 442 *	<return>	0	Error parsing mount options.
 443 *
 444 * HISTORY
 445 *	July 1, 1997 - Andrew E. Mileski
 446 *	Written, tested, and released.
 447 */
 448
 449enum {
 450	Opt_novrs, Opt_nostrict, Opt_bs, Opt_unhide, Opt_undelete,
 451	Opt_noadinicb, Opt_adinicb, Opt_shortad, Opt_longad,
 452	Opt_gid, Opt_uid, Opt_umask, Opt_session, Opt_lastblock,
 453	Opt_anchor, Opt_volume, Opt_partition, Opt_fileset,
 454	Opt_rootdir, Opt_utf8, Opt_iocharset,
 455	Opt_err, Opt_uforget, Opt_uignore, Opt_gforget, Opt_gignore,
 456	Opt_fmode, Opt_dmode
 457};
 458
 459static const match_table_t tokens = {
 460	{Opt_novrs,	"novrs"},
 461	{Opt_nostrict,	"nostrict"},
 462	{Opt_bs,	"bs=%u"},
 463	{Opt_unhide,	"unhide"},
 464	{Opt_undelete,	"undelete"},
 465	{Opt_noadinicb,	"noadinicb"},
 466	{Opt_adinicb,	"adinicb"},
 467	{Opt_shortad,	"shortad"},
 468	{Opt_longad,	"longad"},
 469	{Opt_uforget,	"uid=forget"},
 470	{Opt_uignore,	"uid=ignore"},
 471	{Opt_gforget,	"gid=forget"},
 472	{Opt_gignore,	"gid=ignore"},
 473	{Opt_gid,	"gid=%u"},
 474	{Opt_uid,	"uid=%u"},
 475	{Opt_umask,	"umask=%o"},
 476	{Opt_session,	"session=%u"},
 477	{Opt_lastblock,	"lastblock=%u"},
 478	{Opt_anchor,	"anchor=%u"},
 479	{Opt_volume,	"volume=%u"},
 480	{Opt_partition,	"partition=%u"},
 481	{Opt_fileset,	"fileset=%u"},
 482	{Opt_rootdir,	"rootdir=%u"},
 483	{Opt_utf8,	"utf8"},
 484	{Opt_iocharset,	"iocharset=%s"},
 485	{Opt_fmode,     "mode=%o"},
 486	{Opt_dmode,     "dmode=%o"},
 487	{Opt_err,	NULL}
 488};
 489
 490static int udf_parse_options(char *options, struct udf_options *uopt,
 491			     bool remount)
 492{
 493	char *p;
 494	int option;
 
 495
 496	uopt->novrs = 0;
 497	uopt->partition = 0xFFFF;
 498	uopt->session = 0xFFFFFFFF;
 499	uopt->lastblock = 0;
 500	uopt->anchor = 0;
 501	uopt->volume = 0xFFFFFFFF;
 502	uopt->rootdir = 0xFFFFFFFF;
 503	uopt->fileset = 0xFFFFFFFF;
 504	uopt->nls_map = NULL;
 505
 506	if (!options)
 507		return 1;
 508
 509	while ((p = strsep(&options, ",")) != NULL) {
 510		substring_t args[MAX_OPT_ARGS];
 511		int token;
 512		unsigned n;
 513		if (!*p)
 514			continue;
 515
 516		token = match_token(p, tokens, args);
 517		switch (token) {
 518		case Opt_novrs:
 519			uopt->novrs = 1;
 520			break;
 521		case Opt_bs:
 522			if (match_int(&args[0], &option))
 523				return 0;
 524			n = option;
 525			if (n != 512 && n != 1024 && n != 2048 && n != 4096)
 526				return 0;
 527			uopt->blocksize = n;
 528			uopt->flags |= (1 << UDF_FLAG_BLOCKSIZE_SET);
 529			break;
 530		case Opt_unhide:
 531			uopt->flags |= (1 << UDF_FLAG_UNHIDE);
 532			break;
 533		case Opt_undelete:
 534			uopt->flags |= (1 << UDF_FLAG_UNDELETE);
 535			break;
 536		case Opt_noadinicb:
 537			uopt->flags &= ~(1 << UDF_FLAG_USE_AD_IN_ICB);
 538			break;
 539		case Opt_adinicb:
 540			uopt->flags |= (1 << UDF_FLAG_USE_AD_IN_ICB);
 541			break;
 542		case Opt_shortad:
 543			uopt->flags |= (1 << UDF_FLAG_USE_SHORT_AD);
 544			break;
 545		case Opt_longad:
 546			uopt->flags &= ~(1 << UDF_FLAG_USE_SHORT_AD);
 547			break;
 548		case Opt_gid:
 549			if (match_int(args, &option))
 550				return 0;
 551			uopt->gid = make_kgid(current_user_ns(), option);
 552			if (!gid_valid(uopt->gid))
 553				return 0;
 554			uopt->flags |= (1 << UDF_FLAG_GID_SET);
 555			break;
 556		case Opt_uid:
 557			if (match_int(args, &option))
 558				return 0;
 559			uopt->uid = make_kuid(current_user_ns(), option);
 560			if (!uid_valid(uopt->uid))
 561				return 0;
 562			uopt->flags |= (1 << UDF_FLAG_UID_SET);
 563			break;
 564		case Opt_umask:
 565			if (match_octal(args, &option))
 566				return 0;
 567			uopt->umask = option;
 568			break;
 569		case Opt_nostrict:
 570			uopt->flags &= ~(1 << UDF_FLAG_STRICT);
 571			break;
 572		case Opt_session:
 573			if (match_int(args, &option))
 574				return 0;
 575			uopt->session = option;
 576			if (!remount)
 577				uopt->flags |= (1 << UDF_FLAG_SESSION_SET);
 578			break;
 579		case Opt_lastblock:
 580			if (match_int(args, &option))
 581				return 0;
 582			uopt->lastblock = option;
 583			if (!remount)
 584				uopt->flags |= (1 << UDF_FLAG_LASTBLOCK_SET);
 585			break;
 586		case Opt_anchor:
 587			if (match_int(args, &option))
 588				return 0;
 589			uopt->anchor = option;
 590			break;
 591		case Opt_volume:
 592			if (match_int(args, &option))
 593				return 0;
 594			uopt->volume = option;
 595			break;
 596		case Opt_partition:
 597			if (match_int(args, &option))
 598				return 0;
 599			uopt->partition = option;
 600			break;
 601		case Opt_fileset:
 602			if (match_int(args, &option))
 603				return 0;
 604			uopt->fileset = option;
 605			break;
 606		case Opt_rootdir:
 607			if (match_int(args, &option))
 608				return 0;
 609			uopt->rootdir = option;
 610			break;
 611		case Opt_utf8:
 612			uopt->flags |= (1 << UDF_FLAG_UTF8);
 
 
 
 613			break;
 614#ifdef CONFIG_UDF_NLS
 615		case Opt_iocharset:
 616			uopt->nls_map = load_nls(args[0].from);
 617			uopt->flags |= (1 << UDF_FLAG_NLS_MAP);
 618			break;
 619#endif
 620		case Opt_uignore:
 621			uopt->flags |= (1 << UDF_FLAG_UID_IGNORE);
 
 
 
 
 
 
 
 622			break;
 623		case Opt_uforget:
 624			uopt->flags |= (1 << UDF_FLAG_UID_FORGET);
 625			break;
 
 626		case Opt_gignore:
 627			uopt->flags |= (1 << UDF_FLAG_GID_IGNORE);
 628			break;
 629		case Opt_gforget:
 630			uopt->flags |= (1 << UDF_FLAG_GID_FORGET);
 631			break;
 632		case Opt_fmode:
 633			if (match_octal(args, &option))
 634				return 0;
 635			uopt->fmode = option & 0777;
 636			break;
 637		case Opt_dmode:
 638			if (match_octal(args, &option))
 639				return 0;
 640			uopt->dmode = option & 0777;
 641			break;
 642		default:
 643			pr_err("bad mount option \"%s\" or missing value\n", p);
 644			return 0;
 645		}
 646	}
 647	return 1;
 648}
 649
 650static int udf_remount_fs(struct super_block *sb, int *flags, char *options)
 651{
 652	struct udf_options uopt;
 653	struct udf_sb_info *sbi = UDF_SB(sb);
 654	int error = 0;
 655	struct logicalVolIntegrityDescImpUse *lvidiu = udf_sb_lvidiu(sb);
 
 
 656
 657	sync_filesystem(sb);
 658	if (lvidiu) {
 659		int write_rev = le16_to_cpu(lvidiu->minUDFWriteRev);
 660		if (write_rev > UDF_MAX_WRITE_VERSION && !(*flags & MS_RDONLY))
 661			return -EACCES;
 662	}
 663
 664	uopt.flags = sbi->s_flags;
 665	uopt.uid   = sbi->s_uid;
 666	uopt.gid   = sbi->s_gid;
 667	uopt.umask = sbi->s_umask;
 668	uopt.fmode = sbi->s_fmode;
 669	uopt.dmode = sbi->s_dmode;
 
 670
 671	if (!udf_parse_options(options, &uopt, true))
 672		return -EINVAL;
 673
 674	write_lock(&sbi->s_cred_lock);
 675	sbi->s_flags = uopt.flags;
 676	sbi->s_uid   = uopt.uid;
 677	sbi->s_gid   = uopt.gid;
 678	sbi->s_umask = uopt.umask;
 679	sbi->s_fmode = uopt.fmode;
 680	sbi->s_dmode = uopt.dmode;
 681	write_unlock(&sbi->s_cred_lock);
 682
 683	if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
 684		goto out_unlock;
 685
 686	if (*flags & MS_RDONLY)
 687		udf_close_lvid(sb);
 688	else
 689		udf_open_lvid(sb);
 690
 691out_unlock:
 692	return error;
 693}
 694
 695/* Check Volume Structure Descriptors (ECMA 167 2/9.1) */
 696/* We also check any "CD-ROM Volume Descriptor Set" (ECMA 167 2/8.3.1) */
 697static loff_t udf_check_vsd(struct super_block *sb)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 698{
 699	struct volStructDesc *vsd = NULL;
 700	loff_t sector = VSD_FIRST_SECTOR_OFFSET;
 701	int sectorsize;
 702	struct buffer_head *bh = NULL;
 703	int nsr02 = 0;
 704	int nsr03 = 0;
 705	struct udf_sb_info *sbi;
 
 706
 707	sbi = UDF_SB(sb);
 708	if (sb->s_blocksize < sizeof(struct volStructDesc))
 709		sectorsize = sizeof(struct volStructDesc);
 710	else
 711		sectorsize = sb->s_blocksize;
 712
 713	sector += (sbi->s_session << sb->s_blocksize_bits);
 
 714
 715	udf_debug("Starting at sector %u (%ld byte sectors)\n",
 716		  (unsigned int)(sector >> sb->s_blocksize_bits),
 717		  sb->s_blocksize);
 718	/* Process the sequence (if applicable). The hard limit on the sector
 719	 * offset is arbitrary, hopefully large enough so that all valid UDF
 720	 * filesystems will be recognised. There is no mention of an upper
 721	 * bound to the size of the volume recognition area in the standard.
 722	 *  The limit will prevent the code to read all the sectors of a
 723	 * specially crafted image (like a bluray disc full of CD001 sectors),
 724	 * potentially causing minutes or even hours of uninterruptible I/O
 725	 * activity. This actually happened with uninitialised SSD partitions
 726	 * (all 0xFF) before the check for the limit and all valid IDs were
 727	 * added */
 728	for (; !nsr02 && !nsr03 && sector < VSD_MAX_SECTOR_OFFSET;
 729	     sector += sectorsize) {
 730		/* Read a block */
 731		bh = udf_tread(sb, sector >> sb->s_blocksize_bits);
 732		if (!bh)
 733			break;
 734
 735		/* Look for ISO  descriptors */
 736		vsd = (struct volStructDesc *)(bh->b_data +
 737					      (sector & (sb->s_blocksize - 1)));
 738
 739		if (!strncmp(vsd->stdIdent, VSD_STD_ID_CD001,
 740				    VSD_STD_ID_LEN)) {
 741			switch (vsd->structType) {
 742			case 0:
 743				udf_debug("ISO9660 Boot Record found\n");
 744				break;
 745			case 1:
 746				udf_debug("ISO9660 Primary Volume Descriptor found\n");
 747				break;
 748			case 2:
 749				udf_debug("ISO9660 Supplementary Volume Descriptor found\n");
 750				break;
 751			case 3:
 752				udf_debug("ISO9660 Volume Partition Descriptor found\n");
 753				break;
 754			case 255:
 755				udf_debug("ISO9660 Volume Descriptor Set Terminator found\n");
 756				break;
 757			default:
 758				udf_debug("ISO9660 VRS (%u) found\n",
 759					  vsd->structType);
 760				break;
 761			}
 762		} else if (!strncmp(vsd->stdIdent, VSD_STD_ID_BEA01,
 763				    VSD_STD_ID_LEN))
 764			; /* nothing */
 765		else if (!strncmp(vsd->stdIdent, VSD_STD_ID_TEA01,
 766				    VSD_STD_ID_LEN)) {
 767			brelse(bh);
 768			break;
 769		} else if (!strncmp(vsd->stdIdent, VSD_STD_ID_NSR02,
 770				    VSD_STD_ID_LEN))
 771			nsr02 = sector;
 772		else if (!strncmp(vsd->stdIdent, VSD_STD_ID_NSR03,
 773				    VSD_STD_ID_LEN))
 774			nsr03 = sector;
 775		else if (!strncmp(vsd->stdIdent, VSD_STD_ID_BOOT2,
 776				    VSD_STD_ID_LEN))
 777			; /* nothing */
 778		else if (!strncmp(vsd->stdIdent, VSD_STD_ID_CDW02,
 779				    VSD_STD_ID_LEN))
 780			; /* nothing */
 781		else {
 782			/* invalid id : end of volume recognition area */
 783			brelse(bh);
 784			break;
 
 
 
 
 
 
 
 
 
 
 
 785		}
 786		brelse(bh);
 787	}
 788
 789	if (nsr03)
 790		return nsr03;
 791	else if (nsr02)
 792		return nsr02;
 793	else if (!bh && sector - (sbi->s_session << sb->s_blocksize_bits) ==
 794			VSD_FIRST_SECTOR_OFFSET)
 795		return -1;
 796	else
 797		return 0;
 798}
 799
 800static int udf_find_fileset(struct super_block *sb,
 801			    struct kernel_lb_addr *fileset,
 802			    struct kernel_lb_addr *root)
 803{
 804	struct buffer_head *bh = NULL;
 805	long lastblock;
 806	uint16_t ident;
 807	struct udf_sb_info *sbi;
 808
 809	if (fileset->logicalBlockNum != 0xFFFFFFFF ||
 810	    fileset->partitionReferenceNum != 0xFFFF) {
 811		bh = udf_read_ptagged(sb, fileset, 0, &ident);
 812
 813		if (!bh) {
 814			return 1;
 815		} else if (ident != TAG_IDENT_FSD) {
 816			brelse(bh);
 817			return 1;
 
 
 
 
 
 
 818		}
 
 
 
 819
 820	}
 
 
 
 
 
 
 
 
 
 
 821
 822	sbi = UDF_SB(sb);
 823	if (!bh) {
 824		/* Search backwards through the partitions */
 825		struct kernel_lb_addr newfileset;
 826
 827/* --> cvg: FIXME - is it reasonable? */
 828		return 1;
 829
 830		for (newfileset.partitionReferenceNum = sbi->s_partitions - 1;
 831		     (newfileset.partitionReferenceNum != 0xFFFF &&
 832		      fileset->logicalBlockNum == 0xFFFFFFFF &&
 833		      fileset->partitionReferenceNum == 0xFFFF);
 834		     newfileset.partitionReferenceNum--) {
 835			lastblock = sbi->s_partmaps
 836					[newfileset.partitionReferenceNum]
 837						.s_partition_len;
 838			newfileset.logicalBlockNum = 0;
 839
 840			do {
 841				bh = udf_read_ptagged(sb, &newfileset, 0,
 842						      &ident);
 843				if (!bh) {
 844					newfileset.logicalBlockNum++;
 845					continue;
 846				}
 847
 848				switch (ident) {
 849				case TAG_IDENT_SBD:
 850				{
 851					struct spaceBitmapDesc *sp;
 852					sp = (struct spaceBitmapDesc *)
 853								bh->b_data;
 854					newfileset.logicalBlockNum += 1 +
 855						((le32_to_cpu(sp->numOfBytes) +
 856						  sizeof(struct spaceBitmapDesc)
 857						  - 1) >> sb->s_blocksize_bits);
 858					brelse(bh);
 859					break;
 860				}
 861				case TAG_IDENT_FSD:
 862					*fileset = newfileset;
 863					break;
 864				default:
 865					newfileset.logicalBlockNum++;
 866					brelse(bh);
 867					bh = NULL;
 868					break;
 869				}
 870			} while (newfileset.logicalBlockNum < lastblock &&
 871				 fileset->logicalBlockNum == 0xFFFFFFFF &&
 872				 fileset->partitionReferenceNum == 0xFFFF);
 873		}
 874	}
 875
 876	if ((fileset->logicalBlockNum != 0xFFFFFFFF ||
 877	     fileset->partitionReferenceNum != 0xFFFF) && bh) {
 878		udf_debug("Fileset at block=%d, partition=%d\n",
 879			  fileset->logicalBlockNum,
 880			  fileset->partitionReferenceNum);
 881
 882		sbi->s_partition = fileset->partitionReferenceNum;
 883		udf_load_fileset(sb, bh, root);
 
 
 884		brelse(bh);
 885		return 0;
 886	}
 887	return 1;
 
 
 
 
 
 
 
 888}
 889
 890/*
 891 * Load primary Volume Descriptor Sequence
 892 *
 893 * Return <0 on error, 0 on success. -EAGAIN is special meaning next sequence
 894 * should be tried.
 895 */
 896static int udf_load_pvoldesc(struct super_block *sb, sector_t block)
 897{
 898	struct primaryVolDesc *pvoldesc;
 899	uint8_t *outstr;
 900	struct buffer_head *bh;
 901	uint16_t ident;
 902	int ret = -ENOMEM;
 
 903
 904	outstr = kmalloc(128, GFP_NOFS);
 905	if (!outstr)
 906		return -ENOMEM;
 907
 908	bh = udf_read_tagged(sb, block, block, &ident);
 909	if (!bh) {
 910		ret = -EAGAIN;
 911		goto out2;
 912	}
 913
 914	if (ident != TAG_IDENT_PVD) {
 915		ret = -EIO;
 916		goto out_bh;
 917	}
 918
 919	pvoldesc = (struct primaryVolDesc *)bh->b_data;
 920
 921	if (udf_disk_stamp_to_time(&UDF_SB(sb)->s_record_time,
 922			      pvoldesc->recordingDateAndTime)) {
 923#ifdef UDFFS_DEBUG
 924		struct timestamp *ts = &pvoldesc->recordingDateAndTime;
 925		udf_debug("recording time %04u/%02u/%02u %02u:%02u (%x)\n",
 926			  le16_to_cpu(ts->year), ts->month, ts->day, ts->hour,
 927			  ts->minute, le16_to_cpu(ts->typeAndTimezone));
 928#endif
 
 
 
 
 
 
 929	}
 930
 931	ret = udf_dstrCS0toUTF8(outstr, 31, pvoldesc->volIdent, 32);
 932	if (ret < 0)
 933		goto out_bh;
 934
 935	strncpy(UDF_SB(sb)->s_volume_ident, outstr, ret);
 936	udf_debug("volIdent[] = '%s'\n", UDF_SB(sb)->s_volume_ident);
 937
 938	ret = udf_dstrCS0toUTF8(outstr, 127, pvoldesc->volSetIdent, 128);
 939	if (ret < 0)
 
 940		goto out_bh;
 941
 942	outstr[ret] = 0;
 943	udf_debug("volSetIdent[] = '%s'\n", outstr);
 944
 945	ret = 0;
 946out_bh:
 947	brelse(bh);
 948out2:
 949	kfree(outstr);
 950	return ret;
 951}
 952
 953struct inode *udf_find_metadata_inode_efe(struct super_block *sb,
 954					u32 meta_file_loc, u32 partition_ref)
 955{
 956	struct kernel_lb_addr addr;
 957	struct inode *metadata_fe;
 958
 959	addr.logicalBlockNum = meta_file_loc;
 960	addr.partitionReferenceNum = partition_ref;
 961
 962	metadata_fe = udf_iget_special(sb, &addr);
 963
 964	if (IS_ERR(metadata_fe)) {
 965		udf_warn(sb, "metadata inode efe not found\n");
 966		return metadata_fe;
 967	}
 968	if (UDF_I(metadata_fe)->i_alloc_type != ICBTAG_FLAG_AD_SHORT) {
 969		udf_warn(sb, "metadata inode efe does not have short allocation descriptors!\n");
 970		iput(metadata_fe);
 971		return ERR_PTR(-EIO);
 972	}
 973
 974	return metadata_fe;
 975}
 976
 977static int udf_load_metadata_files(struct super_block *sb, int partition,
 978				   int type1_index)
 979{
 980	struct udf_sb_info *sbi = UDF_SB(sb);
 981	struct udf_part_map *map;
 982	struct udf_meta_data *mdata;
 983	struct kernel_lb_addr addr;
 984	struct inode *fe;
 985
 986	map = &sbi->s_partmaps[partition];
 987	mdata = &map->s_type_specific.s_metadata;
 988	mdata->s_phys_partition_ref = type1_index;
 989
 990	/* metadata address */
 991	udf_debug("Metadata file location: block = %d part = %d\n",
 992		  mdata->s_meta_file_loc, mdata->s_phys_partition_ref);
 993
 994	fe = udf_find_metadata_inode_efe(sb, mdata->s_meta_file_loc,
 995					 mdata->s_phys_partition_ref);
 996	if (IS_ERR(fe)) {
 997		/* mirror file entry */
 998		udf_debug("Mirror metadata file location: block = %d part = %d\n",
 999			  mdata->s_mirror_file_loc, mdata->s_phys_partition_ref);
1000
1001		fe = udf_find_metadata_inode_efe(sb, mdata->s_mirror_file_loc,
1002						 mdata->s_phys_partition_ref);
1003
1004		if (IS_ERR(fe)) {
1005			udf_err(sb, "Both metadata and mirror metadata inode efe can not found\n");
1006			return PTR_ERR(fe);
1007		}
1008		mdata->s_mirror_fe = fe;
1009	} else
1010		mdata->s_metadata_fe = fe;
1011
1012
1013	/*
1014	 * bitmap file entry
1015	 * Note:
1016	 * Load only if bitmap file location differs from 0xFFFFFFFF (DCN-5102)
1017	*/
1018	if (mdata->s_bitmap_file_loc != 0xFFFFFFFF) {
1019		addr.logicalBlockNum = mdata->s_bitmap_file_loc;
1020		addr.partitionReferenceNum = mdata->s_phys_partition_ref;
1021
1022		udf_debug("Bitmap file location: block = %d part = %d\n",
1023			  addr.logicalBlockNum, addr.partitionReferenceNum);
1024
1025		fe = udf_iget_special(sb, &addr);
1026		if (IS_ERR(fe)) {
1027			if (sb->s_flags & MS_RDONLY)
1028				udf_warn(sb, "bitmap inode efe not found but it's ok since the disc is mounted read-only\n");
1029			else {
1030				udf_err(sb, "bitmap inode efe not found and attempted read-write mount\n");
1031				return PTR_ERR(fe);
1032			}
1033		} else
1034			mdata->s_bitmap_fe = fe;
1035	}
1036
1037	udf_debug("udf_load_metadata_files Ok\n");
1038	return 0;
1039}
1040
1041static void udf_load_fileset(struct super_block *sb, struct buffer_head *bh,
1042			     struct kernel_lb_addr *root)
1043{
1044	struct fileSetDesc *fset;
1045
1046	fset = (struct fileSetDesc *)bh->b_data;
1047
1048	*root = lelb_to_cpu(fset->rootDirectoryICB.extLocation);
1049
1050	UDF_SB(sb)->s_serial_number = le16_to_cpu(fset->descTag.tagSerialNum);
1051
1052	udf_debug("Rootdir at block=%d, partition=%d\n",
1053		  root->logicalBlockNum, root->partitionReferenceNum);
1054}
1055
1056int udf_compute_nr_groups(struct super_block *sb, u32 partition)
1057{
1058	struct udf_part_map *map = &UDF_SB(sb)->s_partmaps[partition];
1059	return DIV_ROUND_UP(map->s_partition_len +
1060			    (sizeof(struct spaceBitmapDesc) << 3),
1061			    sb->s_blocksize * 8);
1062}
1063
1064static struct udf_bitmap *udf_sb_alloc_bitmap(struct super_block *sb, u32 index)
1065{
1066	struct udf_bitmap *bitmap;
1067	int nr_groups;
1068	int size;
1069
1070	nr_groups = udf_compute_nr_groups(sb, index);
1071	size = sizeof(struct udf_bitmap) +
1072		(sizeof(struct buffer_head *) * nr_groups);
1073
1074	if (size <= PAGE_SIZE)
1075		bitmap = kzalloc(size, GFP_KERNEL);
1076	else
1077		bitmap = vzalloc(size); /* TODO: get rid of vzalloc */
1078
1079	if (bitmap == NULL)
1080		return NULL;
1081
1082	bitmap->s_nr_groups = nr_groups;
1083	return bitmap;
1084}
1085
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1086static int udf_fill_partdesc_info(struct super_block *sb,
1087		struct partitionDesc *p, int p_index)
1088{
1089	struct udf_part_map *map;
1090	struct udf_sb_info *sbi = UDF_SB(sb);
1091	struct partitionHeaderDesc *phd;
 
1092
1093	map = &sbi->s_partmaps[p_index];
1094
1095	map->s_partition_len = le32_to_cpu(p->partitionLength); /* blocks */
1096	map->s_partition_root = le32_to_cpu(p->partitionStartingLocation);
1097
1098	if (p->accessType == cpu_to_le32(PD_ACCESS_TYPE_READ_ONLY))
1099		map->s_partition_flags |= UDF_PART_FLAG_READ_ONLY;
1100	if (p->accessType == cpu_to_le32(PD_ACCESS_TYPE_WRITE_ONCE))
1101		map->s_partition_flags |= UDF_PART_FLAG_WRITE_ONCE;
1102	if (p->accessType == cpu_to_le32(PD_ACCESS_TYPE_REWRITABLE))
1103		map->s_partition_flags |= UDF_PART_FLAG_REWRITABLE;
1104	if (p->accessType == cpu_to_le32(PD_ACCESS_TYPE_OVERWRITABLE))
1105		map->s_partition_flags |= UDF_PART_FLAG_OVERWRITABLE;
1106
1107	udf_debug("Partition (%d type %x) starts at physical %d, block length %d\n",
1108		  p_index, map->s_partition_type,
1109		  map->s_partition_root, map->s_partition_len);
1110
1111	if (strcmp(p->partitionContents.ident, PD_PARTITION_CONTENTS_NSR02) &&
1112	    strcmp(p->partitionContents.ident, PD_PARTITION_CONTENTS_NSR03))
 
 
 
 
 
 
 
 
1113		return 0;
1114
1115	phd = (struct partitionHeaderDesc *)p->partitionContentsUse;
1116	if (phd->unallocSpaceTable.extLength) {
1117		struct kernel_lb_addr loc = {
1118			.logicalBlockNum = le32_to_cpu(
1119				phd->unallocSpaceTable.extPosition),
1120			.partitionReferenceNum = p_index,
1121		};
1122		struct inode *inode;
1123
1124		inode = udf_iget_special(sb, &loc);
1125		if (IS_ERR(inode)) {
1126			udf_debug("cannot load unallocSpaceTable (part %d)\n",
1127				  p_index);
1128			return PTR_ERR(inode);
1129		}
1130		map->s_uspace.s_table = inode;
1131		map->s_partition_flags |= UDF_PART_FLAG_UNALLOC_TABLE;
1132		udf_debug("unallocSpaceTable (part %d) @ %ld\n",
1133			  p_index, map->s_uspace.s_table->i_ino);
1134	}
1135
1136	if (phd->unallocSpaceBitmap.extLength) {
1137		struct udf_bitmap *bitmap = udf_sb_alloc_bitmap(sb, p_index);
1138		if (!bitmap)
1139			return -ENOMEM;
1140		map->s_uspace.s_bitmap = bitmap;
1141		bitmap->s_extPosition = le32_to_cpu(
1142				phd->unallocSpaceBitmap.extPosition);
1143		map->s_partition_flags |= UDF_PART_FLAG_UNALLOC_BITMAP;
1144		udf_debug("unallocSpaceBitmap (part %d) @ %d\n",
1145			  p_index, bitmap->s_extPosition);
1146	}
1147
1148	if (phd->partitionIntegrityTable.extLength)
1149		udf_debug("partitionIntegrityTable (part %d)\n", p_index);
1150
1151	if (phd->freedSpaceTable.extLength) {
1152		struct kernel_lb_addr loc = {
1153			.logicalBlockNum = le32_to_cpu(
1154				phd->freedSpaceTable.extPosition),
1155			.partitionReferenceNum = p_index,
1156		};
1157		struct inode *inode;
1158
1159		inode = udf_iget_special(sb, &loc);
1160		if (IS_ERR(inode)) {
1161			udf_debug("cannot load freedSpaceTable (part %d)\n",
1162				  p_index);
1163			return PTR_ERR(inode);
1164		}
1165		map->s_fspace.s_table = inode;
1166		map->s_partition_flags |= UDF_PART_FLAG_FREED_TABLE;
1167		udf_debug("freedSpaceTable (part %d) @ %ld\n",
1168			  p_index, map->s_fspace.s_table->i_ino);
1169	}
1170
1171	if (phd->freedSpaceBitmap.extLength) {
1172		struct udf_bitmap *bitmap = udf_sb_alloc_bitmap(sb, p_index);
1173		if (!bitmap)
1174			return -ENOMEM;
1175		map->s_fspace.s_bitmap = bitmap;
1176		bitmap->s_extPosition = le32_to_cpu(
1177				phd->freedSpaceBitmap.extPosition);
1178		map->s_partition_flags |= UDF_PART_FLAG_FREED_BITMAP;
1179		udf_debug("freedSpaceBitmap (part %d) @ %d\n",
1180			  p_index, bitmap->s_extPosition);
1181	}
1182	return 0;
1183}
1184
1185static void udf_find_vat_block(struct super_block *sb, int p_index,
1186			       int type1_index, sector_t start_block)
1187{
1188	struct udf_sb_info *sbi = UDF_SB(sb);
1189	struct udf_part_map *map = &sbi->s_partmaps[p_index];
1190	sector_t vat_block;
1191	struct kernel_lb_addr ino;
1192	struct inode *inode;
1193
1194	/*
1195	 * VAT file entry is in the last recorded block. Some broken disks have
1196	 * it a few blocks before so try a bit harder...
1197	 */
1198	ino.partitionReferenceNum = type1_index;
1199	for (vat_block = start_block;
1200	     vat_block >= map->s_partition_root &&
1201	     vat_block >= start_block - 3; vat_block--) {
1202		ino.logicalBlockNum = vat_block - map->s_partition_root;
1203		inode = udf_iget_special(sb, &ino);
1204		if (!IS_ERR(inode)) {
1205			sbi->s_vat_inode = inode;
1206			break;
1207		}
1208	}
1209}
1210
1211static int udf_load_vat(struct super_block *sb, int p_index, int type1_index)
1212{
1213	struct udf_sb_info *sbi = UDF_SB(sb);
1214	struct udf_part_map *map = &sbi->s_partmaps[p_index];
1215	struct buffer_head *bh = NULL;
1216	struct udf_inode_info *vati;
1217	uint32_t pos;
1218	struct virtualAllocationTable20 *vat20;
1219	sector_t blocks = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits;
 
1220
1221	udf_find_vat_block(sb, p_index, type1_index, sbi->s_last_block);
1222	if (!sbi->s_vat_inode &&
1223	    sbi->s_last_block != blocks - 1) {
1224		pr_notice("Failed to read VAT inode from the last recorded block (%lu), retrying with the last block of the device (%lu).\n",
1225			  (unsigned long)sbi->s_last_block,
1226			  (unsigned long)blocks - 1);
1227		udf_find_vat_block(sb, p_index, type1_index, blocks - 1);
1228	}
1229	if (!sbi->s_vat_inode)
1230		return -EIO;
1231
1232	if (map->s_partition_type == UDF_VIRTUAL_MAP15) {
1233		map->s_type_specific.s_virtual.s_start_offset = 0;
1234		map->s_type_specific.s_virtual.s_num_entries =
1235			(sbi->s_vat_inode->i_size - 36) >> 2;
1236	} else if (map->s_partition_type == UDF_VIRTUAL_MAP20) {
1237		vati = UDF_I(sbi->s_vat_inode);
1238		if (vati->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) {
1239			pos = udf_block_map(sbi->s_vat_inode, 0);
1240			bh = sb_bread(sb, pos);
1241			if (!bh)
1242				return -EIO;
1243			vat20 = (struct virtualAllocationTable20 *)bh->b_data;
1244		} else {
1245			vat20 = (struct virtualAllocationTable20 *)
1246							vati->i_ext.i_data;
1247		}
1248
1249		map->s_type_specific.s_virtual.s_start_offset =
1250			le16_to_cpu(vat20->lengthHeader);
1251		map->s_type_specific.s_virtual.s_num_entries =
1252			(sbi->s_vat_inode->i_size -
1253				map->s_type_specific.s_virtual.
1254					s_start_offset) >> 2;
1255		brelse(bh);
1256	}
1257	return 0;
1258}
1259
1260/*
1261 * Load partition descriptor block
1262 *
1263 * Returns <0 on error, 0 on success, -EAGAIN is special - try next descriptor
1264 * sequence.
1265 */
1266static int udf_load_partdesc(struct super_block *sb, sector_t block)
1267{
1268	struct buffer_head *bh;
1269	struct partitionDesc *p;
1270	struct udf_part_map *map;
1271	struct udf_sb_info *sbi = UDF_SB(sb);
1272	int i, type1_idx;
1273	uint16_t partitionNumber;
1274	uint16_t ident;
1275	int ret;
1276
1277	bh = udf_read_tagged(sb, block, block, &ident);
1278	if (!bh)
1279		return -EAGAIN;
1280	if (ident != TAG_IDENT_PD) {
1281		ret = 0;
1282		goto out_bh;
1283	}
1284
1285	p = (struct partitionDesc *)bh->b_data;
1286	partitionNumber = le16_to_cpu(p->partitionNumber);
1287
1288	/* First scan for TYPE1 and SPARABLE partitions */
1289	for (i = 0; i < sbi->s_partitions; i++) {
1290		map = &sbi->s_partmaps[i];
1291		udf_debug("Searching map: (%d == %d)\n",
1292			  map->s_partition_num, partitionNumber);
1293		if (map->s_partition_num == partitionNumber &&
1294		    (map->s_partition_type == UDF_TYPE1_MAP15 ||
1295		     map->s_partition_type == UDF_SPARABLE_MAP15))
1296			break;
1297	}
1298
1299	if (i >= sbi->s_partitions) {
1300		udf_debug("Partition (%d) not found in partition map\n",
1301			  partitionNumber);
1302		ret = 0;
1303		goto out_bh;
1304	}
1305
1306	ret = udf_fill_partdesc_info(sb, p, i);
1307	if (ret < 0)
1308		goto out_bh;
1309
1310	/*
1311	 * Now rescan for VIRTUAL or METADATA partitions when SPARABLE and
1312	 * PHYSICAL partitions are already set up
1313	 */
1314	type1_idx = i;
1315#ifdef UDFFS_DEBUG
1316	map = NULL; /* supress 'maybe used uninitialized' warning */
1317#endif
1318	for (i = 0; i < sbi->s_partitions; i++) {
1319		map = &sbi->s_partmaps[i];
1320
1321		if (map->s_partition_num == partitionNumber &&
1322		    (map->s_partition_type == UDF_VIRTUAL_MAP15 ||
1323		     map->s_partition_type == UDF_VIRTUAL_MAP20 ||
1324		     map->s_partition_type == UDF_METADATA_MAP25))
1325			break;
1326	}
1327
1328	if (i >= sbi->s_partitions) {
1329		ret = 0;
1330		goto out_bh;
1331	}
1332
1333	ret = udf_fill_partdesc_info(sb, p, i);
1334	if (ret < 0)
1335		goto out_bh;
1336
1337	if (map->s_partition_type == UDF_METADATA_MAP25) {
1338		ret = udf_load_metadata_files(sb, i, type1_idx);
1339		if (ret < 0) {
1340			udf_err(sb, "error loading MetaData partition map %d\n",
1341				i);
1342			goto out_bh;
1343		}
1344	} else {
1345		/*
1346		 * If we have a partition with virtual map, we don't handle
1347		 * writing to it (we overwrite blocks instead of relocating
1348		 * them).
1349		 */
1350		if (!(sb->s_flags & MS_RDONLY)) {
1351			ret = -EACCES;
1352			goto out_bh;
1353		}
 
1354		ret = udf_load_vat(sb, i, type1_idx);
1355		if (ret < 0)
1356			goto out_bh;
1357	}
1358	ret = 0;
1359out_bh:
1360	/* In case loading failed, we handle cleanup in udf_fill_super */
1361	brelse(bh);
1362	return ret;
1363}
1364
1365static int udf_load_sparable_map(struct super_block *sb,
1366				 struct udf_part_map *map,
1367				 struct sparablePartitionMap *spm)
1368{
1369	uint32_t loc;
1370	uint16_t ident;
1371	struct sparingTable *st;
1372	struct udf_sparing_data *sdata = &map->s_type_specific.s_sparing;
1373	int i;
1374	struct buffer_head *bh;
1375
1376	map->s_partition_type = UDF_SPARABLE_MAP15;
1377	sdata->s_packet_len = le16_to_cpu(spm->packetLength);
1378	if (!is_power_of_2(sdata->s_packet_len)) {
1379		udf_err(sb, "error loading logical volume descriptor: "
1380			"Invalid packet length %u\n",
1381			(unsigned)sdata->s_packet_len);
1382		return -EIO;
1383	}
1384	if (spm->numSparingTables > 4) {
1385		udf_err(sb, "error loading logical volume descriptor: "
1386			"Too many sparing tables (%d)\n",
1387			(int)spm->numSparingTables);
1388		return -EIO;
1389	}
 
 
 
 
 
 
1390
1391	for (i = 0; i < spm->numSparingTables; i++) {
1392		loc = le32_to_cpu(spm->locSparingTable[i]);
1393		bh = udf_read_tagged(sb, loc, loc, &ident);
1394		if (!bh)
1395			continue;
1396
1397		st = (struct sparingTable *)bh->b_data;
1398		if (ident != 0 ||
1399		    strncmp(st->sparingIdent.ident, UDF_ID_SPARING,
1400			    strlen(UDF_ID_SPARING)) ||
1401		    sizeof(*st) + le16_to_cpu(st->reallocationTableLen) >
1402							sb->s_blocksize) {
1403			brelse(bh);
1404			continue;
1405		}
1406
1407		sdata->s_spar_map[i] = bh;
1408	}
1409	map->s_partition_func = udf_get_pblock_spar15;
1410	return 0;
1411}
1412
1413static int udf_load_logicalvol(struct super_block *sb, sector_t block,
1414			       struct kernel_lb_addr *fileset)
1415{
1416	struct logicalVolDesc *lvd;
1417	int i, offset;
1418	uint8_t type;
1419	struct udf_sb_info *sbi = UDF_SB(sb);
1420	struct genericPartitionMap *gpm;
1421	uint16_t ident;
1422	struct buffer_head *bh;
1423	unsigned int table_len;
1424	int ret;
1425
1426	bh = udf_read_tagged(sb, block, block, &ident);
1427	if (!bh)
1428		return -EAGAIN;
1429	BUG_ON(ident != TAG_IDENT_LVD);
1430	lvd = (struct logicalVolDesc *)bh->b_data;
1431	table_len = le32_to_cpu(lvd->mapTableLength);
1432	if (table_len > sb->s_blocksize - sizeof(*lvd)) {
1433		udf_err(sb, "error loading logical volume descriptor: "
1434			"Partition table too long (%u > %lu)\n", table_len,
1435			sb->s_blocksize - sizeof(*lvd));
1436		ret = -EIO;
1437		goto out_bh;
1438	}
1439
 
 
 
 
1440	ret = udf_sb_alloc_partition_maps(sb, le32_to_cpu(lvd->numPartitionMaps));
1441	if (ret)
1442		goto out_bh;
1443
1444	for (i = 0, offset = 0;
1445	     i < sbi->s_partitions && offset < table_len;
1446	     i++, offset += gpm->partitionMapLength) {
1447		struct udf_part_map *map = &sbi->s_partmaps[i];
1448		gpm = (struct genericPartitionMap *)
1449				&(lvd->partitionMaps[offset]);
1450		type = gpm->partitionMapType;
1451		if (type == 1) {
1452			struct genericPartitionMap1 *gpm1 =
1453				(struct genericPartitionMap1 *)gpm;
1454			map->s_partition_type = UDF_TYPE1_MAP15;
1455			map->s_volumeseqnum = le16_to_cpu(gpm1->volSeqNum);
1456			map->s_partition_num = le16_to_cpu(gpm1->partitionNum);
1457			map->s_partition_func = NULL;
1458		} else if (type == 2) {
1459			struct udfPartitionMap2 *upm2 =
1460						(struct udfPartitionMap2 *)gpm;
1461			if (!strncmp(upm2->partIdent.ident, UDF_ID_VIRTUAL,
1462						strlen(UDF_ID_VIRTUAL))) {
1463				u16 suf =
1464					le16_to_cpu(((__le16 *)upm2->partIdent.
1465							identSuffix)[0]);
1466				if (suf < 0x0200) {
1467					map->s_partition_type =
1468							UDF_VIRTUAL_MAP15;
1469					map->s_partition_func =
1470							udf_get_pblock_virt15;
1471				} else {
1472					map->s_partition_type =
1473							UDF_VIRTUAL_MAP20;
1474					map->s_partition_func =
1475							udf_get_pblock_virt20;
1476				}
1477			} else if (!strncmp(upm2->partIdent.ident,
1478						UDF_ID_SPARABLE,
1479						strlen(UDF_ID_SPARABLE))) {
1480				ret = udf_load_sparable_map(sb, map,
1481					(struct sparablePartitionMap *)gpm);
1482				if (ret < 0)
1483					goto out_bh;
1484			} else if (!strncmp(upm2->partIdent.ident,
1485						UDF_ID_METADATA,
1486						strlen(UDF_ID_METADATA))) {
1487				struct udf_meta_data *mdata =
1488					&map->s_type_specific.s_metadata;
1489				struct metadataPartitionMap *mdm =
1490						(struct metadataPartitionMap *)
1491						&(lvd->partitionMaps[offset]);
1492				udf_debug("Parsing Logical vol part %d type %d  id=%s\n",
1493					  i, type, UDF_ID_METADATA);
1494
1495				map->s_partition_type = UDF_METADATA_MAP25;
1496				map->s_partition_func = udf_get_pblock_meta25;
1497
1498				mdata->s_meta_file_loc   =
1499					le32_to_cpu(mdm->metadataFileLoc);
1500				mdata->s_mirror_file_loc =
1501					le32_to_cpu(mdm->metadataMirrorFileLoc);
1502				mdata->s_bitmap_file_loc =
1503					le32_to_cpu(mdm->metadataBitmapFileLoc);
1504				mdata->s_alloc_unit_size =
1505					le32_to_cpu(mdm->allocUnitSize);
1506				mdata->s_align_unit_size =
1507					le16_to_cpu(mdm->alignUnitSize);
1508				if (mdm->flags & 0x01)
1509					mdata->s_flags |= MF_DUPLICATE_MD;
1510
1511				udf_debug("Metadata Ident suffix=0x%x\n",
1512					  le16_to_cpu(*(__le16 *)
1513						      mdm->partIdent.identSuffix));
1514				udf_debug("Metadata part num=%d\n",
1515					  le16_to_cpu(mdm->partitionNum));
1516				udf_debug("Metadata part alloc unit size=%d\n",
1517					  le32_to_cpu(mdm->allocUnitSize));
1518				udf_debug("Metadata file loc=%d\n",
1519					  le32_to_cpu(mdm->metadataFileLoc));
1520				udf_debug("Mirror file loc=%d\n",
1521					  le32_to_cpu(mdm->metadataMirrorFileLoc));
1522				udf_debug("Bitmap file loc=%d\n",
1523					  le32_to_cpu(mdm->metadataBitmapFileLoc));
1524				udf_debug("Flags: %d %d\n",
1525					  mdata->s_flags, mdm->flags);
1526			} else {
1527				udf_debug("Unknown ident: %s\n",
1528					  upm2->partIdent.ident);
1529				continue;
1530			}
1531			map->s_volumeseqnum = le16_to_cpu(upm2->volSeqNum);
1532			map->s_partition_num = le16_to_cpu(upm2->partitionNum);
1533		}
1534		udf_debug("Partition (%d:%d) type %d on volume %d\n",
1535			  i, map->s_partition_num, type, map->s_volumeseqnum);
1536	}
1537
1538	if (fileset) {
1539		struct long_ad *la = (struct long_ad *)&(lvd->logicalVolContentsUse[0]);
1540
1541		*fileset = lelb_to_cpu(la->extLocation);
1542		udf_debug("FileSet found in LogicalVolDesc at block=%d, partition=%d\n",
1543			  fileset->logicalBlockNum,
1544			  fileset->partitionReferenceNum);
1545	}
1546	if (lvd->integritySeqExt.extLength)
1547		udf_load_logicalvolint(sb, leea_to_cpu(lvd->integritySeqExt));
1548	ret = 0;
 
 
 
 
 
 
 
 
 
 
 
1549out_bh:
1550	brelse(bh);
1551	return ret;
1552}
1553
1554/*
1555 * Find the prevailing Logical Volume Integrity Descriptor.
1556 */
1557static void udf_load_logicalvolint(struct super_block *sb, struct kernel_extent_ad loc)
1558{
1559	struct buffer_head *bh, *final_bh;
1560	uint16_t ident;
1561	struct udf_sb_info *sbi = UDF_SB(sb);
1562	struct logicalVolIntegrityDesc *lvid;
1563	int indirections = 0;
 
1564
1565	while (++indirections <= UDF_MAX_LVID_NESTING) {
1566		final_bh = NULL;
1567		while (loc.extLength > 0 &&
1568			(bh = udf_read_tagged(sb, loc.extLocation,
1569					loc.extLocation, &ident))) {
1570			if (ident != TAG_IDENT_LVID) {
1571				brelse(bh);
1572				break;
1573			}
1574
1575			brelse(final_bh);
1576			final_bh = bh;
1577
1578			loc.extLength -= sb->s_blocksize;
1579			loc.extLocation++;
1580		}
1581
1582		if (!final_bh)
1583			return;
1584
1585		brelse(sbi->s_lvid_bh);
1586		sbi->s_lvid_bh = final_bh;
1587
1588		lvid = (struct logicalVolIntegrityDesc *)final_bh->b_data;
1589		if (lvid->nextIntegrityExt.extLength == 0)
1590			return;
1591
1592		loc = leea_to_cpu(lvid->nextIntegrityExt);
1593	}
1594
1595	udf_warn(sb, "Too many LVID indirections (max %u), ignoring.\n",
1596		UDF_MAX_LVID_NESTING);
 
1597	brelse(sbi->s_lvid_bh);
1598	sbi->s_lvid_bh = NULL;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1599}
1600
1601
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1602/*
1603 * Process a main/reserve volume descriptor sequence.
1604 *   @block		First block of first extent of the sequence.
1605 *   @lastblock		Lastblock of first extent of the sequence.
1606 *   @fileset		There we store extent containing root fileset
1607 *
1608 * Returns <0 on error, 0 on success. -EAGAIN is special - try next descriptor
1609 * sequence
1610 */
1611static noinline int udf_process_sequence(
1612		struct super_block *sb,
1613		sector_t block, sector_t lastblock,
1614		struct kernel_lb_addr *fileset)
1615{
1616	struct buffer_head *bh = NULL;
1617	struct udf_vds_record vds[VDS_POS_LENGTH];
1618	struct udf_vds_record *curr;
1619	struct generic_desc *gd;
1620	struct volDescPtr *vdp;
1621	bool done = false;
1622	uint32_t vdsn;
1623	uint16_t ident;
1624	long next_s = 0, next_e = 0;
1625	int ret;
1626	unsigned int indirections = 0;
 
 
1627
1628	memset(vds, 0, sizeof(struct udf_vds_record) * VDS_POS_LENGTH);
 
 
 
 
 
 
 
1629
1630	/*
1631	 * Read the main descriptor sequence and find which descriptors
1632	 * are in it.
1633	 */
1634	for (; (!done && block <= lastblock); block++) {
1635
1636		bh = udf_read_tagged(sb, block, block, &ident);
1637		if (!bh) {
1638			udf_err(sb,
1639				"Block %llu of volume descriptor sequence is corrupted or we could not read it\n",
1640				(unsigned long long)block);
1641			return -EAGAIN;
1642		}
1643
1644		/* Process each descriptor (ISO 13346 3/8.3-8.4) */
1645		gd = (struct generic_desc *)bh->b_data;
1646		vdsn = le32_to_cpu(gd->volDescSeqNum);
1647		switch (ident) {
1648		case TAG_IDENT_PVD: /* ISO 13346 3/10.1 */
1649			curr = &vds[VDS_POS_PRIMARY_VOL_DESC];
1650			if (vdsn >= curr->volDescSeqNum) {
1651				curr->volDescSeqNum = vdsn;
1652				curr->block = block;
 
 
 
1653			}
1654			break;
1655		case TAG_IDENT_VDP: /* ISO 13346 3/10.3 */
1656			curr = &vds[VDS_POS_VOL_DESC_PTR];
1657			if (vdsn >= curr->volDescSeqNum) {
1658				curr->volDescSeqNum = vdsn;
1659				curr->block = block;
1660
1661				vdp = (struct volDescPtr *)bh->b_data;
1662				next_s = le32_to_cpu(
1663					vdp->nextVolDescSeqExt.extLocation);
1664				next_e = le32_to_cpu(
1665					vdp->nextVolDescSeqExt.extLength);
1666				next_e = next_e >> sb->s_blocksize_bits;
1667				next_e += next_s;
1668			}
1669			break;
 
1670		case TAG_IDENT_IUVD: /* ISO 13346 3/10.4 */
1671			curr = &vds[VDS_POS_IMP_USE_VOL_DESC];
1672			if (vdsn >= curr->volDescSeqNum) {
1673				curr->volDescSeqNum = vdsn;
1674				curr->block = block;
1675			}
1676			break;
1677		case TAG_IDENT_PD: /* ISO 13346 3/10.5 */
1678			curr = &vds[VDS_POS_PARTITION_DESC];
1679			if (!curr->block)
1680				curr->block = block;
1681			break;
1682		case TAG_IDENT_LVD: /* ISO 13346 3/10.6 */
1683			curr = &vds[VDS_POS_LOGICAL_VOL_DESC];
1684			if (vdsn >= curr->volDescSeqNum) {
1685				curr->volDescSeqNum = vdsn;
1686				curr->block = block;
1687			}
1688			break;
1689		case TAG_IDENT_USD: /* ISO 13346 3/10.8 */
1690			curr = &vds[VDS_POS_UNALLOC_SPACE_DESC];
1691			if (vdsn >= curr->volDescSeqNum) {
1692				curr->volDescSeqNum = vdsn;
1693				curr->block = block;
1694			}
1695			break;
1696		case TAG_IDENT_TD: /* ISO 13346 3/10.9 */
1697			if (++indirections > UDF_MAX_TD_NESTING) {
1698				udf_err(sb, "too many TDs (max %u supported)\n", UDF_MAX_TD_NESTING);
1699				brelse(bh);
1700				return -EIO;
1701			}
1702
1703			vds[VDS_POS_TERMINATING_DESC].block = block;
1704			if (next_e) {
1705				block = next_s;
1706				lastblock = next_e;
1707				next_s = next_e = 0;
1708			} else
1709				done = true;
1710			break;
1711		}
1712		brelse(bh);
1713	}
1714	/*
1715	 * Now read interesting descriptors again and process them
1716	 * in a suitable order
1717	 */
1718	if (!vds[VDS_POS_PRIMARY_VOL_DESC].block) {
1719		udf_err(sb, "Primary Volume Descriptor not found!\n");
1720		return -EAGAIN;
 
1721	}
1722	ret = udf_load_pvoldesc(sb, vds[VDS_POS_PRIMARY_VOL_DESC].block);
1723	if (ret < 0)
1724		return ret;
1725
1726	if (vds[VDS_POS_LOGICAL_VOL_DESC].block) {
1727		ret = udf_load_logicalvol(sb,
1728					  vds[VDS_POS_LOGICAL_VOL_DESC].block,
1729					  fileset);
1730		if (ret < 0)
1731			return ret;
1732	}
1733
1734	if (vds[VDS_POS_PARTITION_DESC].block) {
1735		/*
1736		 * We rescan the whole descriptor sequence to find
1737		 * partition descriptor blocks and process them.
1738		 */
1739		for (block = vds[VDS_POS_PARTITION_DESC].block;
1740		     block < vds[VDS_POS_TERMINATING_DESC].block;
1741		     block++) {
1742			ret = udf_load_partdesc(sb, block);
1743			if (ret < 0)
1744				return ret;
1745		}
1746	}
1747
1748	return 0;
 
 
1749}
1750
1751/*
1752 * Load Volume Descriptor Sequence described by anchor in bh
1753 *
1754 * Returns <0 on error, 0 on success
1755 */
1756static int udf_load_sequence(struct super_block *sb, struct buffer_head *bh,
1757			     struct kernel_lb_addr *fileset)
1758{
1759	struct anchorVolDescPtr *anchor;
1760	sector_t main_s, main_e, reserve_s, reserve_e;
1761	int ret;
1762
1763	anchor = (struct anchorVolDescPtr *)bh->b_data;
1764
1765	/* Locate the main sequence */
1766	main_s = le32_to_cpu(anchor->mainVolDescSeqExt.extLocation);
1767	main_e = le32_to_cpu(anchor->mainVolDescSeqExt.extLength);
1768	main_e = main_e >> sb->s_blocksize_bits;
1769	main_e += main_s;
1770
1771	/* Locate the reserve sequence */
1772	reserve_s = le32_to_cpu(anchor->reserveVolDescSeqExt.extLocation);
1773	reserve_e = le32_to_cpu(anchor->reserveVolDescSeqExt.extLength);
1774	reserve_e = reserve_e >> sb->s_blocksize_bits;
1775	reserve_e += reserve_s;
1776
1777	/* Process the main & reserve sequences */
1778	/* responsible for finding the PartitionDesc(s) */
1779	ret = udf_process_sequence(sb, main_s, main_e, fileset);
1780	if (ret != -EAGAIN)
1781		return ret;
1782	udf_sb_free_partitions(sb);
1783	ret = udf_process_sequence(sb, reserve_s, reserve_e, fileset);
1784	if (ret < 0) {
1785		udf_sb_free_partitions(sb);
1786		/* No sequence was OK, return -EIO */
1787		if (ret == -EAGAIN)
1788			ret = -EIO;
1789	}
1790	return ret;
1791}
1792
1793/*
1794 * Check whether there is an anchor block in the given block and
1795 * load Volume Descriptor Sequence if so.
1796 *
1797 * Returns <0 on error, 0 on success, -EAGAIN is special - try next anchor
1798 * block
1799 */
1800static int udf_check_anchor_block(struct super_block *sb, sector_t block,
1801				  struct kernel_lb_addr *fileset)
1802{
1803	struct buffer_head *bh;
1804	uint16_t ident;
1805	int ret;
1806
1807	if (UDF_QUERY_FLAG(sb, UDF_FLAG_VARCONV) &&
1808	    udf_fixed_to_variable(block) >=
1809	    sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits)
1810		return -EAGAIN;
1811
1812	bh = udf_read_tagged(sb, block, block, &ident);
1813	if (!bh)
1814		return -EAGAIN;
1815	if (ident != TAG_IDENT_AVDP) {
1816		brelse(bh);
1817		return -EAGAIN;
1818	}
1819	ret = udf_load_sequence(sb, bh, fileset);
1820	brelse(bh);
1821	return ret;
1822}
1823
1824/*
1825 * Search for an anchor volume descriptor pointer.
1826 *
1827 * Returns < 0 on error, 0 on success. -EAGAIN is special - try next set
1828 * of anchors.
1829 */
1830static int udf_scan_anchors(struct super_block *sb, sector_t *lastblock,
1831			    struct kernel_lb_addr *fileset)
1832{
1833	sector_t last[6];
1834	int i;
1835	struct udf_sb_info *sbi = UDF_SB(sb);
1836	int last_count = 0;
1837	int ret;
1838
1839	/* First try user provided anchor */
1840	if (sbi->s_anchor) {
1841		ret = udf_check_anchor_block(sb, sbi->s_anchor, fileset);
1842		if (ret != -EAGAIN)
1843			return ret;
1844	}
1845	/*
1846	 * according to spec, anchor is in either:
1847	 *     block 256
1848	 *     lastblock-256
1849	 *     lastblock
1850	 *  however, if the disc isn't closed, it could be 512.
1851	 */
1852	ret = udf_check_anchor_block(sb, sbi->s_session + 256, fileset);
1853	if (ret != -EAGAIN)
1854		return ret;
1855	/*
1856	 * The trouble is which block is the last one. Drives often misreport
1857	 * this so we try various possibilities.
1858	 */
1859	last[last_count++] = *lastblock;
1860	if (*lastblock >= 1)
1861		last[last_count++] = *lastblock - 1;
1862	last[last_count++] = *lastblock + 1;
1863	if (*lastblock >= 2)
1864		last[last_count++] = *lastblock - 2;
1865	if (*lastblock >= 150)
1866		last[last_count++] = *lastblock - 150;
1867	if (*lastblock >= 152)
1868		last[last_count++] = *lastblock - 152;
1869
1870	for (i = 0; i < last_count; i++) {
1871		if (last[i] >= sb->s_bdev->bd_inode->i_size >>
1872				sb->s_blocksize_bits)
1873			continue;
1874		ret = udf_check_anchor_block(sb, last[i], fileset);
1875		if (ret != -EAGAIN) {
1876			if (!ret)
1877				*lastblock = last[i];
1878			return ret;
1879		}
1880		if (last[i] < 256)
1881			continue;
1882		ret = udf_check_anchor_block(sb, last[i] - 256, fileset);
1883		if (ret != -EAGAIN) {
1884			if (!ret)
1885				*lastblock = last[i];
1886			return ret;
1887		}
1888	}
1889
1890	/* Finally try block 512 in case media is open */
1891	return udf_check_anchor_block(sb, sbi->s_session + 512, fileset);
1892}
1893
1894/*
1895 * Find an anchor volume descriptor and load Volume Descriptor Sequence from
1896 * area specified by it. The function expects sbi->s_lastblock to be the last
1897 * block on the media.
1898 *
1899 * Return <0 on error, 0 if anchor found. -EAGAIN is special meaning anchor
1900 * was not found.
1901 */
1902static int udf_find_anchor(struct super_block *sb,
1903			   struct kernel_lb_addr *fileset)
1904{
1905	struct udf_sb_info *sbi = UDF_SB(sb);
1906	sector_t lastblock = sbi->s_last_block;
1907	int ret;
1908
1909	ret = udf_scan_anchors(sb, &lastblock, fileset);
1910	if (ret != -EAGAIN)
1911		goto out;
1912
1913	/* No anchor found? Try VARCONV conversion of block numbers */
1914	UDF_SET_FLAG(sb, UDF_FLAG_VARCONV);
1915	lastblock = udf_variable_to_fixed(sbi->s_last_block);
1916	/* Firstly, we try to not convert number of the last block */
1917	ret = udf_scan_anchors(sb, &lastblock, fileset);
1918	if (ret != -EAGAIN)
1919		goto out;
1920
1921	lastblock = sbi->s_last_block;
1922	/* Secondly, we try with converted number of the last block */
1923	ret = udf_scan_anchors(sb, &lastblock, fileset);
1924	if (ret < 0) {
1925		/* VARCONV didn't help. Clear it. */
1926		UDF_CLEAR_FLAG(sb, UDF_FLAG_VARCONV);
1927	}
1928out:
1929	if (ret == 0)
1930		sbi->s_last_block = lastblock;
1931	return ret;
1932}
1933
1934/*
1935 * Check Volume Structure Descriptor, find Anchor block and load Volume
1936 * Descriptor Sequence.
1937 *
1938 * Returns < 0 on error, 0 on success. -EAGAIN is special meaning anchor
1939 * block was not found.
1940 */
1941static int udf_load_vrs(struct super_block *sb, struct udf_options *uopt,
1942			int silent, struct kernel_lb_addr *fileset)
1943{
1944	struct udf_sb_info *sbi = UDF_SB(sb);
1945	loff_t nsr_off;
1946	int ret;
1947
1948	if (!sb_set_blocksize(sb, uopt->blocksize)) {
1949		if (!silent)
1950			udf_warn(sb, "Bad block size\n");
1951		return -EINVAL;
1952	}
1953	sbi->s_last_block = uopt->lastblock;
1954	if (!uopt->novrs) {
1955		/* Check that it is NSR02 compliant */
1956		nsr_off = udf_check_vsd(sb);
1957		if (!nsr_off) {
1958			if (!silent)
1959				udf_warn(sb, "No VRS found\n");
1960			return 0;
1961		}
1962		if (nsr_off == -1)
1963			udf_debug("Failed to read sector at offset %d. "
1964				  "Assuming open disc. Skipping validity "
1965				  "check\n", VSD_FIRST_SECTOR_OFFSET);
1966		if (!sbi->s_last_block)
1967			sbi->s_last_block = udf_get_last_block(sb);
1968	} else {
1969		udf_debug("Validity check skipped because of novrs option\n");
1970	}
1971
1972	/* Look for anchor block and load Volume Descriptor Sequence */
1973	sbi->s_anchor = uopt->anchor;
1974	ret = udf_find_anchor(sb, fileset);
1975	if (ret < 0) {
1976		if (!silent && ret == -EAGAIN)
1977			udf_warn(sb, "No anchor found\n");
1978		return ret;
1979	}
1980	return 0;
1981}
1982
 
 
 
 
 
 
 
 
 
 
 
 
1983static void udf_open_lvid(struct super_block *sb)
1984{
1985	struct udf_sb_info *sbi = UDF_SB(sb);
1986	struct buffer_head *bh = sbi->s_lvid_bh;
1987	struct logicalVolIntegrityDesc *lvid;
1988	struct logicalVolIntegrityDescImpUse *lvidiu;
1989
1990	if (!bh)
1991		return;
1992	lvid = (struct logicalVolIntegrityDesc *)bh->b_data;
1993	lvidiu = udf_sb_lvidiu(sb);
1994	if (!lvidiu)
1995		return;
1996
1997	mutex_lock(&sbi->s_alloc_mutex);
1998	lvidiu->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
1999	lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
2000	udf_time_to_disk_stamp(&lvid->recordingDateAndTime,
2001				CURRENT_TIME);
2002	lvid->integrityType = cpu_to_le32(LVID_INTEGRITY_TYPE_OPEN);
2003
2004	lvid->descTag.descCRC = cpu_to_le16(
2005		crc_itu_t(0, (char *)lvid + sizeof(struct tag),
2006			le16_to_cpu(lvid->descTag.descCRCLength)));
2007
2008	lvid->descTag.tagChecksum = udf_tag_checksum(&lvid->descTag);
2009	mark_buffer_dirty(bh);
2010	sbi->s_lvid_dirty = 0;
2011	mutex_unlock(&sbi->s_alloc_mutex);
2012	/* Make opening of filesystem visible on the media immediately */
2013	sync_dirty_buffer(bh);
2014}
2015
2016static void udf_close_lvid(struct super_block *sb)
2017{
2018	struct udf_sb_info *sbi = UDF_SB(sb);
2019	struct buffer_head *bh = sbi->s_lvid_bh;
2020	struct logicalVolIntegrityDesc *lvid;
2021	struct logicalVolIntegrityDescImpUse *lvidiu;
2022
2023	if (!bh)
2024		return;
2025	lvid = (struct logicalVolIntegrityDesc *)bh->b_data;
2026	lvidiu = udf_sb_lvidiu(sb);
2027	if (!lvidiu)
2028		return;
2029
2030	mutex_lock(&sbi->s_alloc_mutex);
2031	lvidiu->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
2032	lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
2033	udf_time_to_disk_stamp(&lvid->recordingDateAndTime, CURRENT_TIME);
2034	if (UDF_MAX_WRITE_VERSION > le16_to_cpu(lvidiu->maxUDFWriteRev))
2035		lvidiu->maxUDFWriteRev = cpu_to_le16(UDF_MAX_WRITE_VERSION);
2036	if (sbi->s_udfrev > le16_to_cpu(lvidiu->minUDFReadRev))
2037		lvidiu->minUDFReadRev = cpu_to_le16(sbi->s_udfrev);
2038	if (sbi->s_udfrev > le16_to_cpu(lvidiu->minUDFWriteRev))
2039		lvidiu->minUDFWriteRev = cpu_to_le16(sbi->s_udfrev);
2040	lvid->integrityType = cpu_to_le32(LVID_INTEGRITY_TYPE_CLOSE);
2041
2042	lvid->descTag.descCRC = cpu_to_le16(
2043			crc_itu_t(0, (char *)lvid + sizeof(struct tag),
2044				le16_to_cpu(lvid->descTag.descCRCLength)));
2045
2046	lvid->descTag.tagChecksum = udf_tag_checksum(&lvid->descTag);
2047	/*
2048	 * We set buffer uptodate unconditionally here to avoid spurious
2049	 * warnings from mark_buffer_dirty() when previous EIO has marked
2050	 * the buffer as !uptodate
2051	 */
2052	set_buffer_uptodate(bh);
 
2053	mark_buffer_dirty(bh);
2054	sbi->s_lvid_dirty = 0;
2055	mutex_unlock(&sbi->s_alloc_mutex);
2056	/* Make closing of filesystem visible on the media immediately */
2057	sync_dirty_buffer(bh);
2058}
2059
2060u64 lvid_get_unique_id(struct super_block *sb)
2061{
2062	struct buffer_head *bh;
2063	struct udf_sb_info *sbi = UDF_SB(sb);
2064	struct logicalVolIntegrityDesc *lvid;
2065	struct logicalVolHeaderDesc *lvhd;
2066	u64 uniqueID;
2067	u64 ret;
2068
2069	bh = sbi->s_lvid_bh;
2070	if (!bh)
2071		return 0;
2072
2073	lvid = (struct logicalVolIntegrityDesc *)bh->b_data;
2074	lvhd = (struct logicalVolHeaderDesc *)lvid->logicalVolContentsUse;
2075
2076	mutex_lock(&sbi->s_alloc_mutex);
2077	ret = uniqueID = le64_to_cpu(lvhd->uniqueID);
2078	if (!(++uniqueID & 0xFFFFFFFF))
2079		uniqueID += 16;
2080	lvhd->uniqueID = cpu_to_le64(uniqueID);
 
2081	mutex_unlock(&sbi->s_alloc_mutex);
2082	mark_buffer_dirty(bh);
2083
2084	return ret;
2085}
2086
2087static int udf_fill_super(struct super_block *sb, void *options, int silent)
2088{
2089	int ret = -EINVAL;
2090	struct inode *inode = NULL;
2091	struct udf_options uopt;
2092	struct kernel_lb_addr rootdir, fileset;
2093	struct udf_sb_info *sbi;
2094	bool lvid_open = false;
2095
2096	uopt.flags = (1 << UDF_FLAG_USE_AD_IN_ICB) | (1 << UDF_FLAG_STRICT);
2097	uopt.uid = INVALID_UID;
2098	uopt.gid = INVALID_GID;
 
2099	uopt.umask = 0;
2100	uopt.fmode = UDF_INVALID_MODE;
2101	uopt.dmode = UDF_INVALID_MODE;
 
2102
2103	sbi = kzalloc(sizeof(struct udf_sb_info), GFP_KERNEL);
2104	if (!sbi)
2105		return -ENOMEM;
2106
2107	sb->s_fs_info = sbi;
2108
2109	mutex_init(&sbi->s_alloc_mutex);
2110
2111	if (!udf_parse_options((char *)options, &uopt, false))
2112		goto parse_options_failure;
2113
2114	if (uopt.flags & (1 << UDF_FLAG_UTF8) &&
2115	    uopt.flags & (1 << UDF_FLAG_NLS_MAP)) {
2116		udf_err(sb, "utf8 cannot be combined with iocharset\n");
2117		goto parse_options_failure;
2118	}
2119#ifdef CONFIG_UDF_NLS
2120	if ((uopt.flags & (1 << UDF_FLAG_NLS_MAP)) && !uopt.nls_map) {
2121		uopt.nls_map = load_nls_default();
2122		if (!uopt.nls_map)
2123			uopt.flags &= ~(1 << UDF_FLAG_NLS_MAP);
2124		else
2125			udf_debug("Using default NLS map\n");
2126	}
2127#endif
2128	if (!(uopt.flags & (1 << UDF_FLAG_NLS_MAP)))
2129		uopt.flags |= (1 << UDF_FLAG_UTF8);
2130
2131	fileset.logicalBlockNum = 0xFFFFFFFF;
2132	fileset.partitionReferenceNum = 0xFFFF;
2133
2134	sbi->s_flags = uopt.flags;
2135	sbi->s_uid = uopt.uid;
2136	sbi->s_gid = uopt.gid;
2137	sbi->s_umask = uopt.umask;
2138	sbi->s_fmode = uopt.fmode;
2139	sbi->s_dmode = uopt.dmode;
2140	sbi->s_nls_map = uopt.nls_map;
2141	rwlock_init(&sbi->s_cred_lock);
2142
2143	if (uopt.session == 0xFFFFFFFF)
2144		sbi->s_session = udf_get_last_session(sb);
2145	else
2146		sbi->s_session = uopt.session;
2147
2148	udf_debug("Multi-session=%d\n", sbi->s_session);
2149
2150	/* Fill in the rest of the superblock */
2151	sb->s_op = &udf_sb_ops;
2152	sb->s_export_op = &udf_export_ops;
2153
2154	sb->s_magic = UDF_SUPER_MAGIC;
2155	sb->s_time_gran = 1000;
2156
2157	if (uopt.flags & (1 << UDF_FLAG_BLOCKSIZE_SET)) {
2158		ret = udf_load_vrs(sb, &uopt, silent, &fileset);
2159	} else {
2160		uopt.blocksize = bdev_logical_block_size(sb->s_bdev);
2161		ret = udf_load_vrs(sb, &uopt, silent, &fileset);
2162		if (ret == -EAGAIN && uopt.blocksize != UDF_DEFAULT_BLOCKSIZE) {
2163			if (!silent)
2164				pr_notice("Rescanning with blocksize %d\n",
2165					  UDF_DEFAULT_BLOCKSIZE);
2166			brelse(sbi->s_lvid_bh);
2167			sbi->s_lvid_bh = NULL;
2168			uopt.blocksize = UDF_DEFAULT_BLOCKSIZE;
2169			ret = udf_load_vrs(sb, &uopt, silent, &fileset);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2170		}
2171	}
2172	if (ret < 0) {
2173		if (ret == -EAGAIN) {
2174			udf_warn(sb, "No partition found (1)\n");
2175			ret = -EINVAL;
2176		}
2177		goto error_out;
2178	}
2179
2180	udf_debug("Lastblock=%d\n", sbi->s_last_block);
2181
2182	if (sbi->s_lvid_bh) {
2183		struct logicalVolIntegrityDescImpUse *lvidiu =
2184							udf_sb_lvidiu(sb);
2185		uint16_t minUDFReadRev;
2186		uint16_t minUDFWriteRev;
2187
2188		if (!lvidiu) {
2189			ret = -EINVAL;
2190			goto error_out;
2191		}
2192		minUDFReadRev = le16_to_cpu(lvidiu->minUDFReadRev);
2193		minUDFWriteRev = le16_to_cpu(lvidiu->minUDFWriteRev);
2194		if (minUDFReadRev > UDF_MAX_READ_VERSION) {
2195			udf_err(sb, "minUDFReadRev=%x (max is %x)\n",
2196				minUDFReadRev,
2197				UDF_MAX_READ_VERSION);
2198			ret = -EINVAL;
2199			goto error_out;
2200		} else if (minUDFWriteRev > UDF_MAX_WRITE_VERSION &&
2201			   !(sb->s_flags & MS_RDONLY)) {
2202			ret = -EACCES;
2203			goto error_out;
 
 
2204		}
2205
2206		sbi->s_udfrev = minUDFWriteRev;
2207
2208		if (minUDFReadRev >= UDF_VERS_USE_EXTENDED_FE)
2209			UDF_SET_FLAG(sb, UDF_FLAG_USE_EXTENDED_FE);
2210		if (minUDFReadRev >= UDF_VERS_USE_STREAMS)
2211			UDF_SET_FLAG(sb, UDF_FLAG_USE_STREAMS);
2212	}
2213
2214	if (!sbi->s_partitions) {
2215		udf_warn(sb, "No partition found (2)\n");
2216		ret = -EINVAL;
2217		goto error_out;
2218	}
2219
2220	if (sbi->s_partmaps[sbi->s_partition].s_partition_flags &
2221			UDF_PART_FLAG_READ_ONLY &&
2222	    !(sb->s_flags & MS_RDONLY)) {
2223		ret = -EACCES;
2224		goto error_out;
 
 
2225	}
2226
2227	if (udf_find_fileset(sb, &fileset, &rootdir)) {
 
2228		udf_warn(sb, "No fileset found\n");
2229		ret = -EINVAL;
2230		goto error_out;
2231	}
2232
2233	if (!silent) {
2234		struct timestamp ts;
2235		udf_time_to_disk_stamp(&ts, sbi->s_record_time);
2236		udf_info("Mounting volume '%s', timestamp %04u/%02u/%02u %02u:%02u (%x)\n",
2237			 sbi->s_volume_ident,
2238			 le16_to_cpu(ts.year), ts.month, ts.day,
2239			 ts.hour, ts.minute, le16_to_cpu(ts.typeAndTimezone));
2240	}
2241	if (!(sb->s_flags & MS_RDONLY)) {
2242		udf_open_lvid(sb);
2243		lvid_open = true;
2244	}
2245
2246	/* Assign the root inode */
2247	/* assign inodes by physical block number */
2248	/* perhaps it's not extensible enough, but for now ... */
2249	inode = udf_iget(sb, &rootdir);
2250	if (IS_ERR(inode)) {
2251		udf_err(sb, "Error in udf_iget, block=%d, partition=%d\n",
2252		       rootdir.logicalBlockNum, rootdir.partitionReferenceNum);
2253		ret = PTR_ERR(inode);
2254		goto error_out;
2255	}
2256
2257	/* Allocate a dentry for the root inode */
2258	sb->s_root = d_make_root(inode);
2259	if (!sb->s_root) {
2260		udf_err(sb, "Couldn't allocate root dentry\n");
2261		ret = -ENOMEM;
2262		goto error_out;
2263	}
2264	sb->s_maxbytes = MAX_LFS_FILESIZE;
2265	sb->s_max_links = UDF_MAX_LINKS;
2266	return 0;
2267
2268error_out:
2269	iput(sbi->s_vat_inode);
2270parse_options_failure:
2271#ifdef CONFIG_UDF_NLS
2272	if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP))
2273		unload_nls(sbi->s_nls_map);
2274#endif
2275	if (lvid_open)
2276		udf_close_lvid(sb);
2277	brelse(sbi->s_lvid_bh);
2278	udf_sb_free_partitions(sb);
2279	kfree(sbi);
2280	sb->s_fs_info = NULL;
2281
2282	return ret;
2283}
2284
2285void _udf_err(struct super_block *sb, const char *function,
2286	      const char *fmt, ...)
2287{
2288	struct va_format vaf;
2289	va_list args;
2290
2291	va_start(args, fmt);
2292
2293	vaf.fmt = fmt;
2294	vaf.va = &args;
2295
2296	pr_err("error (device %s): %s: %pV", sb->s_id, function, &vaf);
2297
2298	va_end(args);
2299}
2300
2301void _udf_warn(struct super_block *sb, const char *function,
2302	       const char *fmt, ...)
2303{
2304	struct va_format vaf;
2305	va_list args;
2306
2307	va_start(args, fmt);
2308
2309	vaf.fmt = fmt;
2310	vaf.va = &args;
2311
2312	pr_warn("warning (device %s): %s: %pV", sb->s_id, function, &vaf);
2313
2314	va_end(args);
2315}
2316
2317static void udf_put_super(struct super_block *sb)
2318{
2319	struct udf_sb_info *sbi;
2320
2321	sbi = UDF_SB(sb);
2322
2323	iput(sbi->s_vat_inode);
2324#ifdef CONFIG_UDF_NLS
2325	if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP))
2326		unload_nls(sbi->s_nls_map);
2327#endif
2328	if (!(sb->s_flags & MS_RDONLY))
2329		udf_close_lvid(sb);
2330	brelse(sbi->s_lvid_bh);
2331	udf_sb_free_partitions(sb);
2332	mutex_destroy(&sbi->s_alloc_mutex);
2333	kfree(sb->s_fs_info);
2334	sb->s_fs_info = NULL;
2335}
2336
2337static int udf_sync_fs(struct super_block *sb, int wait)
2338{
2339	struct udf_sb_info *sbi = UDF_SB(sb);
2340
2341	mutex_lock(&sbi->s_alloc_mutex);
2342	if (sbi->s_lvid_dirty) {
 
 
 
 
 
 
2343		/*
2344		 * Blockdevice will be synced later so we don't have to submit
2345		 * the buffer for IO
2346		 */
2347		mark_buffer_dirty(sbi->s_lvid_bh);
2348		sbi->s_lvid_dirty = 0;
2349	}
2350	mutex_unlock(&sbi->s_alloc_mutex);
2351
2352	return 0;
2353}
2354
2355static int udf_statfs(struct dentry *dentry, struct kstatfs *buf)
2356{
2357	struct super_block *sb = dentry->d_sb;
2358	struct udf_sb_info *sbi = UDF_SB(sb);
2359	struct logicalVolIntegrityDescImpUse *lvidiu;
2360	u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
2361
2362	lvidiu = udf_sb_lvidiu(sb);
2363	buf->f_type = UDF_SUPER_MAGIC;
2364	buf->f_bsize = sb->s_blocksize;
2365	buf->f_blocks = sbi->s_partmaps[sbi->s_partition].s_partition_len;
2366	buf->f_bfree = udf_count_free(sb);
2367	buf->f_bavail = buf->f_bfree;
 
 
 
 
2368	buf->f_files = (lvidiu != NULL ? (le32_to_cpu(lvidiu->numFiles) +
2369					  le32_to_cpu(lvidiu->numDirs)) : 0)
2370			+ buf->f_bfree;
2371	buf->f_ffree = buf->f_bfree;
2372	buf->f_namelen = UDF_NAME_LEN;
2373	buf->f_fsid.val[0] = (u32)id;
2374	buf->f_fsid.val[1] = (u32)(id >> 32);
2375
2376	return 0;
2377}
2378
2379static unsigned int udf_count_free_bitmap(struct super_block *sb,
2380					  struct udf_bitmap *bitmap)
2381{
2382	struct buffer_head *bh = NULL;
2383	unsigned int accum = 0;
2384	int index;
2385	int block = 0, newblock;
2386	struct kernel_lb_addr loc;
2387	uint32_t bytes;
2388	uint8_t *ptr;
2389	uint16_t ident;
2390	struct spaceBitmapDesc *bm;
2391
2392	loc.logicalBlockNum = bitmap->s_extPosition;
2393	loc.partitionReferenceNum = UDF_SB(sb)->s_partition;
2394	bh = udf_read_ptagged(sb, &loc, 0, &ident);
2395
2396	if (!bh) {
2397		udf_err(sb, "udf_count_free failed\n");
2398		goto out;
2399	} else if (ident != TAG_IDENT_SBD) {
2400		brelse(bh);
2401		udf_err(sb, "udf_count_free failed\n");
2402		goto out;
2403	}
2404
2405	bm = (struct spaceBitmapDesc *)bh->b_data;
2406	bytes = le32_to_cpu(bm->numOfBytes);
2407	index = sizeof(struct spaceBitmapDesc); /* offset in first block only */
2408	ptr = (uint8_t *)bh->b_data;
2409
2410	while (bytes > 0) {
2411		u32 cur_bytes = min_t(u32, bytes, sb->s_blocksize - index);
2412		accum += bitmap_weight((const unsigned long *)(ptr + index),
2413					cur_bytes * 8);
2414		bytes -= cur_bytes;
2415		if (bytes) {
2416			brelse(bh);
2417			newblock = udf_get_lb_pblock(sb, &loc, ++block);
2418			bh = udf_tread(sb, newblock);
2419			if (!bh) {
2420				udf_debug("read failed\n");
2421				goto out;
2422			}
2423			index = 0;
2424			ptr = (uint8_t *)bh->b_data;
2425		}
2426	}
2427	brelse(bh);
2428out:
2429	return accum;
2430}
2431
2432static unsigned int udf_count_free_table(struct super_block *sb,
2433					 struct inode *table)
2434{
2435	unsigned int accum = 0;
2436	uint32_t elen;
2437	struct kernel_lb_addr eloc;
2438	int8_t etype;
2439	struct extent_position epos;
2440
2441	mutex_lock(&UDF_SB(sb)->s_alloc_mutex);
2442	epos.block = UDF_I(table)->i_location;
2443	epos.offset = sizeof(struct unallocSpaceEntry);
2444	epos.bh = NULL;
2445
2446	while ((etype = udf_next_aext(table, &epos, &eloc, &elen, 1)) != -1)
2447		accum += (elen >> table->i_sb->s_blocksize_bits);
2448
2449	brelse(epos.bh);
2450	mutex_unlock(&UDF_SB(sb)->s_alloc_mutex);
2451
2452	return accum;
2453}
2454
2455static unsigned int udf_count_free(struct super_block *sb)
2456{
2457	unsigned int accum = 0;
2458	struct udf_sb_info *sbi;
2459	struct udf_part_map *map;
 
 
 
 
 
 
 
 
 
 
 
 
 
2460
2461	sbi = UDF_SB(sb);
2462	if (sbi->s_lvid_bh) {
2463		struct logicalVolIntegrityDesc *lvid =
2464			(struct logicalVolIntegrityDesc *)
2465			sbi->s_lvid_bh->b_data;
2466		if (le32_to_cpu(lvid->numOfPartitions) > sbi->s_partition) {
2467			accum = le32_to_cpu(
2468					lvid->freeSpaceTable[sbi->s_partition]);
2469			if (accum == 0xFFFFFFFF)
2470				accum = 0;
2471		}
2472	}
2473
2474	if (accum)
2475		return accum;
2476
2477	map = &sbi->s_partmaps[sbi->s_partition];
2478	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP) {
2479		accum += udf_count_free_bitmap(sb,
2480					       map->s_uspace.s_bitmap);
2481	}
2482	if (map->s_partition_flags & UDF_PART_FLAG_FREED_BITMAP) {
2483		accum += udf_count_free_bitmap(sb,
2484					       map->s_fspace.s_bitmap);
2485	}
2486	if (accum)
2487		return accum;
2488
2489	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE) {
2490		accum += udf_count_free_table(sb,
2491					      map->s_uspace.s_table);
2492	}
2493	if (map->s_partition_flags & UDF_PART_FLAG_FREED_TABLE) {
2494		accum += udf_count_free_table(sb,
2495					      map->s_fspace.s_table);
2496	}
2497
2498	return accum;
2499}