Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5e24b4e4 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge 4.4.153 into android-4.4



Changes in 4.4.153
	x86/mm/pat: Fix L1TF stable backport for CPA
	x86/mm: Fix use-after-free of ldt_struct
	ovl: Ensure upper filesystem supports d_type
	ovl: Do d_type check only if work dir creation was successful
	ovl: warn instead of error if d_type is not supported
	Linux 4.4.153

Change-Id: I9876acd1c6799c9016edac4adf15dd3818866903
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parents e5c5f1fa 577189c3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
VERSION = 4
PATCHLEVEL = 4
SUBLEVEL = 152
SUBLEVEL = 153
EXTRAVERSION =
NAME = Blurry Fish Butt

+1 −2
Original line number Diff line number Diff line
@@ -109,8 +109,7 @@ static inline int init_new_context(struct task_struct *tsk,
				   struct mm_struct *mm)
{
	mm->context.ctx_id = atomic64_inc_return(&last_mm_ctx_id);
	init_new_context_ldt(tsk, mm);
	return 0;
	return init_new_context_ldt(tsk, mm);
}
static inline void destroy_context(struct mm_struct *mm)
{
+1 −1
Original line number Diff line number Diff line
@@ -1006,7 +1006,7 @@ static int populate_pmd(struct cpa_data *cpa,

		pmd = pmd_offset(pud, start);

		set_pmd(pmd, pmd_mkhuge(pfn_pmd(cpa->pfn,
		set_pmd(pmd, pmd_mkhuge(pfn_pmd(cpa->pfn >> PAGE_SHIFT,
					canon_pgprot(pmd_pgprot))));

		start	  += PMD_SIZE;
+1 −0
Original line number Diff line number Diff line
@@ -163,6 +163,7 @@ extern const struct file_operations ovl_dir_operations;
int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list);
void ovl_cleanup_whiteouts(struct dentry *upper, struct list_head *list);
void ovl_cache_free(struct list_head *list);
int ovl_check_d_type_supported(struct path *realpath);

/* inode.c */
int ovl_setattr(struct dentry *dentry, struct iattr *attr);
+37 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ struct ovl_readdir_data {
	struct ovl_cache_entry *first_maybe_whiteout;
	int count;
	int err;
	bool d_type_supported;
};

struct ovl_dir_file {
@@ -581,3 +582,39 @@ void ovl_cleanup_whiteouts(struct dentry *upper, struct list_head *list)
	}
	mutex_unlock(&upper->d_inode->i_mutex);
}

static int ovl_check_d_type(struct dir_context *ctx, const char *name,
			  int namelen, loff_t offset, u64 ino,
			  unsigned int d_type)
{
	struct ovl_readdir_data *rdd =
		container_of(ctx, struct ovl_readdir_data, ctx);

	/* Even if d_type is not supported, DT_DIR is returned for . and .. */
	if (!strncmp(name, ".", namelen) || !strncmp(name, "..", namelen))
		return 0;

	if (d_type != DT_UNKNOWN)
		rdd->d_type_supported = true;

	return 0;
}

/*
 * Returns 1 if d_type is supported, 0 not supported/unknown. Negative values
 * if error is encountered.
 */
int ovl_check_d_type_supported(struct path *realpath)
{
	int err;
	struct ovl_readdir_data rdd = {
		.ctx.actor = ovl_check_d_type,
		.d_type_supported = false,
	};

	err = ovl_dir_read(realpath, &rdd);
	if (err)
		return err;

	return rdd.d_type_supported;
}
Loading