aboutsummaryrefslogtreecommitdiffstats
path: root/arch/avr32/kernel
Commit message (Expand)AuthorAge
* avr32: export strnlen_userAdrian Bunk2008-05-26
* avr32: export copy_pageAdrian Bunk2008-05-26
* [PATCH] take init_files to fs/file.cAl Viro2008-05-16
* unified (weak) sys_pipe implementationUlrich Drepper2008-05-03
* avr32: use kbuild.h macros instead of defining macros in asm-offsets.cChristoph Lameter2008-04-29
* atmel_lcdfb: don't initialize a pre-allocated framebufferHaavard Skinnemoen2008-04-28
* avr32: Add hardware power-down function callPeter Ma2008-04-19
* avr32: Generic clockevents supportDavid Brownell2008-04-19
* avr32: Move sleep code into mach-at32apHaavard Skinnemoen2008-04-19
* avr32: start clocksource cleanupDavid Brownell2008-04-19
* Generic semaphore implementationMatthew Wilcox2008-04-17
* avr32: Fix bug in early resource allocation codeHaavard Skinnemoen2008-03-27
* avr32: Build fix for CONFIG_BUG=nHaavard Skinnemoen2008-03-13
* avr32: Fix OCD refcounting bugHaavard Skinnemoen2008-02-27
* avr32: Call tick_nohz_{stop,restart}_sched_tick() in idle loopHaavard Skinnemoen2008-02-15
* libfs: allow error return from simple attributesChristoph Hellwig2008-02-08
* Introduce flags for reserve_bootmem()Bernhard Walle2008-02-07
* Fix timerfd breakage on avr32Haavard Skinnemoen2008-02-05
* all archs: consolidate init and exit sections in vmlinux.lds.hSam Ravnborg2008-01-28
* Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hsk...Linus Torvalds2008-01-25
|\
| * [AVR32] NMI debuggingHaavard Skinnemoen2008-01-25
| * [AVR32] constify function pointer tablesJan Engelhardt2008-01-25
| * [AVR32] Provide more CPU information in /proc/cpuinfo and dmesgHaavard Skinnemoen2008-01-25
| * [AVR32] Enable debugging only when neededHaavard Skinnemoen2008-01-25
| * [AVR32] Remove redundant try_to_freeze() call from do_signal()Haavard Skinnemoen2008-01-25
* | Driver core: change sysdev classes to use dynamic kobject namesKay Sievers2008-01-24
|/
* [AVR32] Fix wrong pt_regs in critical exception handlerHaavard Skinnemoen2007-12-07
* [AVR32] Follow the rules when dealing with the OCD systemHaavard Skinnemoen2007-12-07
* [AVR32] Clean up OCD register usageHaavard Skinnemoen2007-12-07
* [AVR32] Implement irqflags trace and lockdep supportHaavard Skinnemoen2007-12-07
* [AVR32] Implement stacktrace supportHaavard Skinnemoen2007-12-07
* [AVR32] Fix invalid status register bit definitions in asm/ptrace.hHaavard Skinnemoen2007-12-07
* pid namespaces: define is_global_init() and is_container_init()Serge E. Hallyn2007-10-19
* kprobes: support kretprobe blacklistMasami Hiramatsu2007-10-16
* Consolidate PTRACE_DETACHAlexey Dobriyan2007-10-16
* [AVR32] Fix random segfault with preemptionPhilippe Rétornaz2007-10-11
* [AVR32] Remove unneeded 8K alignment of .text sectionHaavard Skinnemoen2007-10-11
* [AVR32] Kill a few hardcoded constants in vmlinux.ldsHaavard Skinnemoen2007-10-11
* [AVR32] rename vmlinux.ldsSam Ravnborg2007-10-11
* [AVR32] fix command line parsing in early_parse_fbmemMatteo Vit2007-10-11
* [AVR32] Correct misspelled CONFIG_BLK_DEV_INITRD variable.Robert P. J. Day2007-07-18
* [AVR32] Fix build error in parse_tag_rdimg()Haavard Skinnemoen2007-07-18
* PTRACE_POKEDATA consolidationAlexey Dobriyan2007-07-17
* PTRACE_PEEKDATA consolidationAlexey Dobriyan2007-07-17
* Report that kernel is tainted if there was an OOPSPavel Emelianov2007-07-17
* generic bug: use show_regs() instead of dump_stack()Heiko Carstens2007-07-16
* all-archs: consolidate .data section definition in asm-genericSam Ravnborg2007-05-19
* all-archs: consolidate .text section definition in asm-genericSam Ravnborg2007-05-19
* [AVR32] Wire up signalfd, timerfd and eventfdHaavard Skinnemoen2007-05-13
* [AVR32] optimize pagefault pathChristoph Hellwig2007-05-13
r->ia_valid; if (ia_valid & ATTR_UID) inode->i_uid = attr->ia_uid; if (ia_valid & ATTR_GID) inode->i_gid = attr->ia_gid; if (ia_valid & ATTR_ATIME) inode->i_atime = timespec_trunc(attr->ia_atime, inode->i_sb->s_time_gran); if (ia_valid & ATTR_MTIME) inode->i_mtime = timespec_trunc(attr->ia_mtime, inode->i_sb->s_time_gran); if (ia_valid & ATTR_CTIME) inode->i_ctime = timespec_trunc(attr->ia_ctime, inode->i_sb->s_time_gran); if (ia_valid & ATTR_MODE) { umode_t mode = attr->ia_mode; if (!in_group_p(inode->i_gid) && !capable_wrt_inode_uidgid(inode, CAP_FSETID)) mode &= ~S_ISGID; inode->i_mode = mode; } } EXPORT_SYMBOL(setattr_copy); /** * notify_change - modify attributes of a filesytem object * @dentry: object affected * @iattr: new attributes * @delegated_inode: returns inode, if the inode is delegated * * The caller must hold the i_mutex on the affected object. * * If notify_change discovers a delegation in need of breaking, * it will return -EWOULDBLOCK and return a reference to the inode in * delegated_inode. The caller should then break the delegation and * retry. Because breaking a delegation may take a long time, the * caller should drop the i_mutex before doing so. * * Alternatively, a caller may pass NULL for delegated_inode. This may * be appropriate for callers that expect the underlying filesystem not * to be NFS exported. Also, passing NULL is fine for callers holding * the file open for write, as there can be no conflicting delegation in * that case. */ int notify_change(struct dentry * dentry, struct iattr * attr, struct inode **delegated_inode) { struct inode *inode = dentry->d_inode; umode_t mode = inode->i_mode; int error; struct timespec now; unsigned int ia_valid = attr->ia_valid; WARN_ON_ONCE(!mutex_is_locked(&inode->i_mutex)); if (ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_TIMES_SET)) { if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) return -EPERM; } if ((ia_valid & ATTR_MODE)) { umode_t amode = attr->ia_mode; /* Flag setting protected by i_mutex */ if (is_sxid(amode)) inode->i_flags &= ~S_NOSEC; } now = current_fs_time(inode->i_sb); attr->ia_ctime = now; if (!(ia_valid & ATTR_ATIME_SET)) attr->ia_atime = now; if (!(ia_valid & ATTR_MTIME_SET)) attr->ia_mtime = now; if (ia_valid & ATTR_KILL_PRIV) { attr->ia_valid &= ~ATTR_KILL_PRIV; ia_valid &= ~ATTR_KILL_PRIV; error = security_inode_need_killpriv(dentry); if (error > 0) error = security_inode_killpriv(dentry); if (error) return error; } /* * We now pass ATTR_KILL_S*ID to the lower level setattr function so * that the function has the ability to reinterpret a mode change * that's due to these bits. This adds an implicit restriction that * no function will ever call notify_change with both ATTR_MODE and * ATTR_KILL_S*ID set. */ if ((ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID)) && (ia_valid & ATTR_MODE)) BUG(); if (ia_valid & ATTR_KILL_SUID) { if (mode & S_ISUID) { ia_valid = attr->ia_valid |= ATTR_MODE; attr->ia_mode = (inode->i_mode & ~S_ISUID); } } if (ia_valid & ATTR_KILL_SGID) { if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) { if (!(ia_valid & ATTR_MODE)) { ia_valid = attr->ia_valid |= ATTR_MODE; attr->ia_mode = inode->i_mode; } attr->ia_mode &= ~S_ISGID; } } if (!(attr->ia_valid & ~(ATTR_KILL_SUID | ATTR_KILL_SGID))) return 0; error = security_inode_setattr(dentry, attr); if (error) return error; error = try_break_deleg(inode, delegated_inode); if (error) return error; if (inode->i_op->setattr) error = inode->i_op->setattr(dentry, attr); else error = simple_setattr(dentry, attr); if (!error) { fsnotify_change(dentry, ia_valid); ima_inode_post_setattr(dentry); evm_inode_post_setattr(dentry, ia_valid); } return error; } EXPORT_SYMBOL(notify_change);