diff options
author | Anssi Kalliolahti <akalliolahti@nvidia.com> | 2010-05-26 10:37:13 +0300 |
---|---|---|
committer | Antti Hatala <ahatala@nvidia.com> | 2010-05-27 01:11:09 -0700 |
commit | 10f48922980ac0717b180e23416f6530f3152fbe (patch) | |
tree | c2d14a007da082d67de1edcd147051ffc2a7ae50 /drivers | |
parent | e54cc6e4238dc99ae419a6fee8ee4e9d1be242ee (diff) |
nvmap: allow pinning handles without local context
This reverts partially the commit 46d2a32 "nvmap: tighten handle validation
before pinning".
It appears that we still need to allow pinning handles without local
context (bug 691715). This can be reverted when the root cause gets fixed.
Change-Id: I44cbd97f096d1319c6ea82c0d40030506547fd6c
Reviewed-on: http://git-master/r/1632
Reviewed-by: Patrick Shehane <pshehane@nvidia.com>
Tested-by: Patrick Shehane <pshehane@nvidia.com>
Reviewed-by: Antti Hatala <ahatala@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/char/nvmap.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/char/nvmap.c b/drivers/char/nvmap.c index bc522abcf3e1..12b6fddc5297 100644 --- a/drivers/char/nvmap.c +++ b/drivers/char/nvmap.c @@ -1578,11 +1578,18 @@ static int _nvmap_do_pin(struct nvmap_file_priv *priv, spin_lock(&priv->ref_lock); for (i=0; i<nr && !ret; i++) { r = _nvmap_ref_lookup_locked(priv, refs[i]); - if (likely(r)) atomic_inc(&r->pin); + if (r) atomic_inc(&r->pin); else { - pr_err("%s: %s pinning invalid handle\n", __func__, - current->group_leader->comm); - ret = -EPERM; + if ((h[i]->poison != NVDA_POISON) || + (!(priv->su || h[i]->global || + current->group_leader == h[i]->owner))) + ret = -EPERM; + else { + pr_err("%s: %s pinning %s's %uB handle without " + "local context\n", __func__, + current->group_leader->comm, + h[i]->owner->comm, h[i]->orig_size); + } } } |