Print this page
7656 unlinking directory on tmpfs can cause kernel panic
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/man/man2/unlink.2
+++ new/usr/src/man/man2/unlink.2
1 1 '\" te
2 2 .\" Copyright (c) 2007, Sun Microsystems, Inc. All Rights Reserved.
3 3 .\" Copyright 1989 AT&T
4 4 .\" Portions Copyright (c) 1992, X/Open Company Limited All Rights Reserved.
5 +.\" Copyright 2016 RackTop Systems.
5 6 .\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for permission to reproduce portions of its copyrighted documentation. Original documentation from The Open Group can be obtained online at
6 7 .\" http://www.opengroup.org/bookstore/.
7 8 .\" The Institute of Electrical and Electronics Engineers and The Open Group, have given us permission to reprint portions of their documentation. In the following statement, the phrase "this text" refers to portions of the system documentation. Portions of this text are reprinted and reproduced in electronic form in the Sun OS Reference Manual, from IEEE Std 1003.1, 2004 Edition, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2004 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between these versions and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html.
8 9 .\" This notice shall appear on any product containing this material.
9 10 .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
10 11 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
11 12 .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
12 -.TH UNLINK 2 "May 18, 2007"
13 +.TH UNLINK 2 "Dec 15, 2016"
13 14 .SH NAME
14 15 unlink, unlinkat \- remove directory entry
15 16 .SH SYNOPSIS
16 17 .LP
17 18 .nf
18 19 #include <unistd.h>
19 20
20 21 \fBint\fR \fBunlink\fR(\fBconst char *\fR\fIpath\fR);
21 22 .fi
22 23
23 24 .LP
24 25 .nf
25 26 \fBint\fR \fBunlinkat\fR(\fBint\fR \fIdirfd\fR, \fBconst char *\fR\fIpath\fR, \fBint\fR \fIflag\fR);
26 27 .fi
27 28
28 29 .SH DESCRIPTION
29 30 .sp
30 31 .LP
31 32 The \fBunlink()\fR function removes a link to a file. If \fIpath\fR names a
32 33 symbolic link, \fBunlink()\fR removes the symbolic link named by \fIpath\fR and
33 34 does not affect any file or directory named by the contents of the symbolic
34 35 link. Otherwise, \fBunlink()\fR removes the link named by the pathname pointed
35 36 to by \fIpath\fR and decrements the link count of the file referenced by the
36 37 link.
37 38 .sp
38 39 .LP
39 40 The \fBunlinkat()\fR function also removes a link to a file. See
40 41 \fBfsattr\fR(5). If the \fIflag\fR argument is 0, the behavior of
41 42 \fBunlinkat()\fR is the same as \fBunlink()\fR except in the processing of its
42 43 \fIpath\fR argument. If \fIpath\fR is absolute, \fBunlinkat()\fR behaves the
43 44 same as \fBunlink()\fR and the \fIdirfd\fR argument is unused. If \fIpath\fR is
44 45 relative and \fIdirfd\fR has the value \fBAT_FDCWD\fR, defined in
45 46 <\fBfcntl.h\fR>, \fBunlinkat()\fR also behaves the same as \fBunlink()\fR.
46 47 Otherwise, \fIpath\fR is resolved relative to the directory referenced by the
47 48 \fIdirfd\fR argument.
48 49 .sp
49 50 .LP
50 51 If the \fIflag\fR argument is set to the value \fBAT_REMOVEDIR\fR, defined in
51 52 <\fBfcntl.h\fR>, \fBunlinkat()\fR behaves the same as \fBrmdir\fR(2) except in
52 53 the processing of the \fIpath\fR argument as described above.
53 54 .sp
↓ open down ↓ |
31 lines elided |
↑ open up ↑ |
54 55 .LP
55 56 When the file's link count becomes 0 and no process has the file open, the
56 57 space occupied by the file will be freed and the file is no longer accessible.
57 58 If one or more processes have the file open when the last link is removed, the
58 59 link is removed before \fBunlink()\fR or \fBunlinkat()\fR returns, but the
59 60 removal of the file contents is postponed until all references to the file are
60 61 closed.
61 62 .sp
62 63 .LP
63 64 If the \fIpath\fR argument is a directory and the filesystem supports
64 -\fBunlink()\fR and \fBunlinkat()\fR on directories, the directory is unlinked
65 -from its parent with no cleanup being performed. In UFS, the disconnected
66 -directory will be found the next time the filesystem is checked with
67 -\fBfsck\fR(1M). The \fBunlink()\fR and \fBunlinkat()\fR functions will not fail
68 -simply because a directory is not empty. The user with appropriate privileges
69 -can orphan a non-empty directory without generating an error message.
65 +\fBunlink()\fR and \fBunlinkat()\fR on directories the behaviour is dependent
66 +on the filesystem.
70 67 .sp
71 68 .LP
72 69 If the \fIpath\fR argument is a directory and the filesystem does not support
73 70 \fBunlink()\fR and \fBunlink()\fR on directories (for example, ZFS), the call
74 71 will fail with \fBerrno\fR set to \fBEPERM\fR.
75 72 .sp
76 73 .LP
77 74 Upon successful completion, \fBunlink()\fR and \fBunlinkat()\fR will mark for
78 75 update the \fBst_ctime\fR and \fBst_mtime\fR fields of the parent directory.
79 76 If the file's link count is not 0, the \fBst_ctime\fR field of the file will be
80 77 marked for update.
81 78 .SH RETURN VALUES
82 79 .sp
83 80 .LP
84 81 Upon successful completion, \fB0\fR is returned. Otherwise, \fB\(mi1\fR is
85 82 returned, \fBerrno\fR is set to indicate the error, and the file is not
86 83 unlinked.
87 84 .SH ERRORS
88 85 .sp
89 86 .LP
90 87 The \fBunlink()\fR and \fBunlinkat()\fR functions will fail if:
91 88 .sp
92 89 .ne 2
93 90 .na
94 91 \fB\fBEACCES\fR\fR
95 92 .ad
96 93 .RS 16n
97 94 Search permission is denied for a component of the \fIpath\fR prefix, or write
98 95 permission is denied on the directory containing the link to be removed.
99 96 .RE
100 97
101 98 .sp
102 99 .ne 2
103 100 .na
104 101 \fB\fBEACCES\fR\fR
105 102 .ad
106 103 .RS 16n
107 104 The parent directory has the sticky bit set and the file is not writable by the
108 105 user, the user does not own the parent directory, the user does not own the
109 106 file, and the user is not a privileged user.
110 107 .RE
111 108
112 109 .sp
113 110 .ne 2
114 111 .na
115 112 \fB\fBEBUSY\fR\fR
116 113 .ad
117 114 .RS 16n
118 115 The entry to be unlinked is the mount point for a mounted file system.
119 116 .RE
120 117
121 118 .sp
122 119 .ne 2
123 120 .na
124 121 \fB\fBEFAULT\fR\fR
125 122 .ad
126 123 .RS 16n
127 124 The \fIpath\fR argument points to an illegal address.
128 125 .RE
129 126
130 127 .sp
131 128 .ne 2
132 129 .na
133 130 \fB\fBEILSEQ\fR\fR
134 131 .ad
135 132 .RS 16n
136 133 The path argument includes non-UTF8 characters and the file system accepts only
137 134 file names where all characters are part of the UTF-8 character codeset.
138 135 .RE
139 136
140 137 .sp
141 138 .ne 2
142 139 .na
143 140 \fB\fBEINTR\fR\fR
144 141 .ad
145 142 .RS 16n
146 143 A signal was caught during the execution of the \fBunlink()\fR function.
147 144 .RE
148 145
149 146 .sp
150 147 .ne 2
151 148 .na
152 149 \fB\fBELOOP\fR\fR
153 150 .ad
154 151 .RS 16n
155 152 Too many symbolic links were encountered in translating \fIpath\fR.
156 153 .RE
157 154
158 155 .sp
159 156 .ne 2
160 157 .na
161 158 \fB\fBENAMETOOLONG\fR\fR
162 159 .ad
163 160 .RS 16n
164 161 The length of the \fIpath\fR argument exceeds \fBPATH_MAX\fR, or the length of
165 162 a \fIpath\fR component exceeds \fBNAME_MAX\fR while \fB_POSIX_NO_TRUNC\fR is in
166 163 effect.
167 164 .RE
168 165
169 166 .sp
170 167 .ne 2
171 168 .na
172 169 \fB\fBENOENT\fR\fR
173 170 .ad
174 171 .RS 16n
175 172 The named file does not exist or is a null pathname.
176 173 .RE
177 174
178 175 .sp
179 176 .ne 2
180 177 .na
181 178 \fB\fBENOLINK\fR\fR
182 179 .ad
183 180 .RS 16n
184 181 The \fIpath\fR argument points to a remote machine and the link to that machine
185 182 is no longer active.
186 183 .RE
187 184
188 185 .sp
189 186 .ne 2
190 187 .na
191 188 \fB\fBENOTDIR\fR\fR
192 189 .ad
193 190 .RS 16n
194 191 A component of the \fIpath\fR prefix is not a directory or the provided
195 192 directory descriptor for \fBunlinkat()\fR is not \fBAT_FDCWD\fR or does not
196 193 reference a directory.
197 194 .RE
198 195
199 196 .sp
200 197 .ne 2
201 198 .na
202 199 \fB\fBEPERM\fR\fR
203 200 .ad
204 201 .RS 16n
205 202 The named file is a directory and {\fBPRIV_SYS_LINKDIR\fR} is not asserted in
206 203 the effective set of the calling process, or the filesystem implementation does
207 204 not support \fBunlink()\fR or \fBunlinkat()\fR on directories.
208 205 .RE
209 206
210 207 .sp
211 208 .ne 2
212 209 .na
213 210 \fB\fBEROFS\fR\fR
214 211 .ad
215 212 .RS 16n
216 213 The directory entry to be unlinked is part of a read-only file system.
217 214 .RE
218 215
219 216 .sp
220 217 .LP
221 218 The \fBunlink()\fR and \fBunlinkat()\fR functions may fail if:
222 219 .sp
223 220 .ne 2
224 221 .na
225 222 \fB\fBENAMETOOLONG\fR\fR
226 223 .ad
227 224 .RS 16n
228 225 Pathname resolution of a symbolic link produced an intermediate result whose
229 226 length exceeds {\fBPATH_MAX\fR}.
230 227 .RE
231 228
232 229 .sp
233 230 .ne 2
234 231 .na
235 232 \fB\fBETXTBSY\fR\fR
236 233 .ad
237 234 .RS 16n
238 235 The entry to be unlinked is the last directory entry to a pure procedure
239 236 (shared text) file that is being executed.
240 237 .RE
241 238
242 239 .SH USAGE
243 240 .sp
244 241 .LP
245 242 Applications should use \fBrmdir\fR(2) to remove a directory.
246 243 .SH ATTRIBUTES
247 244 .sp
248 245 .LP
249 246 See \fBattributes\fR(5) for descriptions of the following attributes:
250 247 .sp
251 248
252 249 .sp
253 250 .TS
254 251 box;
255 252 c | c
256 253 l | l .
257 254 ATTRIBUTE TYPE ATTRIBUTE VALUE
258 255 _
259 256 Interface Stability T{
260 257 \fBunlink()\fR is Standard; \fBunlinkat()\fR is Evolving
261 258 T}
262 259 _
263 260 MT-Level Async-Signal-Safe
264 261 .TE
265 262
266 263 .SH SEE ALSO
267 264 .sp
268 265 .LP
269 266 \fBrm\fR(1), \fBclose\fR(2), \fBlink\fR(2), \fBopen\fR(2), \fBrmdir\fR(2),
270 267 \fBremove\fR(3C), \fBattributes\fR(5), \fBprivileges\fR(5), \fBfsattr\fR(5)
↓ open down ↓ |
191 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX