This is the 4.4.153 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAluE3G0ACgkQONu9yGCS aT7+URAAiG/MGLVAJCqx5WwNPXm1fWwMgW+/Okt5VtMJCsudZd+MtYcAr/ThyQu0 Ey80BxFgKLFWdIQ3RagXPiqlclFZLDqDKq7Zro5VhrmNXJvwCz37XD7xLAuMqhNl XXFLUClXUp0uSQ57VaykDloQpGTzT8qu1rJ4pAQFVQsg+3ggEMh/BWVXFvTJwLjx eEvZLL7zoXRV6PIZgG6mcRP6YnNHSHGHawPnT9BDLtTWyb9OdpTHx7U9un+kS/iv S+oiuxVxG7flWSpW7/oAI62DDZu6If8McGJyCTwETeT4P4u4YIVox4zX8oZLzr8N v6NO8Giy6MhQzlnZTVVNrAyfOsbHr4kNR++VUUMSlQzG6w2RalBW2EIQiFnImUJk 344Fpvzdgt2F9Q46W7+ff19YBrqE6H8yFP4Dfqsx0YLSej72hJ2WqSMBuElKVdoO LnhJqA97/lgDnzJbfx+129tLSl/Ly0nL61TKTK39qwKMDaEW0HEa2uU7zJLzrIRQ oFEs0WJDQiYmsq4V8CZJda6+YvRd3tzYMVdXtn1I35ICAhyDWN/WPRlFi59mkiSm Rm5PzRnBm5VuOGSXanHP125etxIF4XbycdIJIEU0hGuRJcWyTEqewtOsAHAd4t7O yaPL/j5xTByU6VgxVuQZ8E7LmUI4mWNgcvtx0pxsqqhEDLs1iDs= =JdYU -----END PGP SIGNATURE----- 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: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
5e24b4e4d3
6 changed files with 61 additions and 4 deletions
2
Makefile
2
Makefile
|
@ -1,6 +1,6 @@
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 4
|
PATCHLEVEL = 4
|
||||||
SUBLEVEL = 152
|
SUBLEVEL = 153
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Blurry Fish Butt
|
NAME = Blurry Fish Butt
|
||||||
|
|
||||||
|
|
|
@ -109,8 +109,7 @@ static inline int init_new_context(struct task_struct *tsk,
|
||||||
struct mm_struct *mm)
|
struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
mm->context.ctx_id = atomic64_inc_return(&last_mm_ctx_id);
|
mm->context.ctx_id = atomic64_inc_return(&last_mm_ctx_id);
|
||||||
init_new_context_ldt(tsk, mm);
|
return init_new_context_ldt(tsk, mm);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
static inline void destroy_context(struct mm_struct *mm)
|
static inline void destroy_context(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1006,7 +1006,7 @@ static int populate_pmd(struct cpa_data *cpa,
|
||||||
|
|
||||||
pmd = pmd_offset(pud, start);
|
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))));
|
canon_pgprot(pmd_pgprot))));
|
||||||
|
|
||||||
start += PMD_SIZE;
|
start += PMD_SIZE;
|
||||||
|
|
|
@ -163,6 +163,7 @@ extern const struct file_operations ovl_dir_operations;
|
||||||
int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list);
|
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_cleanup_whiteouts(struct dentry *upper, struct list_head *list);
|
||||||
void ovl_cache_free(struct list_head *list);
|
void ovl_cache_free(struct list_head *list);
|
||||||
|
int ovl_check_d_type_supported(struct path *realpath);
|
||||||
|
|
||||||
/* inode.c */
|
/* inode.c */
|
||||||
int ovl_setattr(struct dentry *dentry, struct iattr *attr);
|
int ovl_setattr(struct dentry *dentry, struct iattr *attr);
|
||||||
|
|
|
@ -43,6 +43,7 @@ struct ovl_readdir_data {
|
||||||
struct ovl_cache_entry *first_maybe_whiteout;
|
struct ovl_cache_entry *first_maybe_whiteout;
|
||||||
int count;
|
int count;
|
||||||
int err;
|
int err;
|
||||||
|
bool d_type_supported;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ovl_dir_file {
|
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);
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -1054,6 +1054,26 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
|
||||||
sb->s_flags |= MS_RDONLY;
|
sb->s_flags |= MS_RDONLY;
|
||||||
ufs->workdir = NULL;
|
ufs->workdir = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Upper should support d_type, else whiteouts are visible.
|
||||||
|
* Given workdir and upper are on same fs, we can do
|
||||||
|
* iterate_dir() on workdir. This check requires successful
|
||||||
|
* creation of workdir in previous step.
|
||||||
|
*/
|
||||||
|
if (ufs->workdir) {
|
||||||
|
err = ovl_check_d_type_supported(&workpath);
|
||||||
|
if (err < 0)
|
||||||
|
goto out_put_workdir;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We allowed this configuration and don't want to
|
||||||
|
* break users over kernel upgrade. So warn instead
|
||||||
|
* of erroring out.
|
||||||
|
*/
|
||||||
|
if (!err)
|
||||||
|
pr_warn("overlayfs: upper fs needs to support d_type.\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
|
|
Loading…
Add table
Reference in a new issue