Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP5:Update
autofs.5460
autofs-5-1-1-change-time-to-use-monotonic_clock...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File autofs-5-1-1-change-time-to-use-monotonic_clock.patch of Package autofs.5460
From: Yu Ning <ning.yu@ubuntu.com> Subject: autofs-5.1.1 - change time() to use monotonic_clock() Git-repo: git://git.kernel.org/pub/scm/linux/storage/autofs/autofs.git Git-commit: 9f3d839396ce476009f5cc275def7451473c341c Patch-mainline: 5.1.2 References: bsc#1046493 The time returned by gettimeofday() is affected by discontinuous jumps in the system time, so it causes an issue that autofs may not auto unmount a mount point if system time is manually changed by the system administrator. To fix the issue we need to convert to using a monotonic clock source instead of the clock source used by gettimeofday(). Finally hange the time() function calls to monotonic_clock() calls. Signed-off-by: Yu Ning <ning.yu@ubuntu.com> Signed-off-by: Ian Kent <raven@themaw.net> Acked-by: Jeff Mahoney <jeffm@suse.com> --- daemon/automount.c | 4 ++-- daemon/direct.c | 4 ++-- daemon/indirect.c | 4 ++-- daemon/lookup.c | 6 +++--- daemon/state.c | 2 +- lib/cache.c | 2 +- lib/master.c | 4 ++-- modules/dclist.c | 2 +- modules/lookup_file.c | 6 +++--- modules/lookup_hesiod.c | 4 ++-- modules/lookup_hosts.c | 4 ++-- modules/lookup_ldap.c | 8 ++++---- modules/lookup_nisplus.c | 8 ++++---- modules/lookup_program.c | 6 +++--- modules/lookup_sss.c | 6 +++--- modules/lookup_userhome.c | 2 +- modules/lookup_yp.c | 6 +++--- modules/mount_autofs.c | 2 +- modules/replicated.c | 4 ++-- 19 files changed, 42 insertions(+), 42 deletions(-) --- a/daemon/automount.c +++ b/daemon/automount.c @@ -1403,7 +1403,7 @@ static void *statemachine(void *arg) break; case SIGHUP: - do_hup_signal(master_list, time(NULL)); + do_hup_signal(master_list, monotonic_time(NULL)); break; default: @@ -1947,7 +1947,7 @@ int main(int argc, char *argv[]) unsigned ghost, logging, daemon_check; unsigned dumpmaps, foreground, have_global_options; time_t timeout; - time_t age = time(NULL); + time_t age = monotonic_time(NULL); struct rlimit rlim; const char *options = "+hp:t:vmdD:fVrO:l:n:CF"; static const struct option long_options[] = { --- a/daemon/direct.c +++ b/daemon/direct.c @@ -464,7 +464,7 @@ int mount_autofs_direct(struct autofs_po struct mapent_cache *nc, *mc; struct mapent *me, *ne, *nested; struct mnt_list *mnts; - time_t now = time(NULL); + time_t now = monotonic_time(NULL); if (strcmp(ap->path, "/-")) { error(ap->logopt, "expected direct map, exiting"); @@ -1383,7 +1383,7 @@ int handle_packet_missing_direct(struct } /* Check if we recorded a mount fail for this key */ - if (me->status >= time(NULL)) { + if (me->status >= monotonic_time(NULL)) { ops->send_fail(ap->logopt, ioctlfd, pkt->wait_queue_token, -ENOENT); ops->close(ap->logopt, ioctlfd); --- a/daemon/indirect.c +++ b/daemon/indirect.c @@ -197,7 +197,7 @@ out_err: int mount_autofs_indirect(struct autofs_point *ap, const char *root) { - time_t now = time(NULL); + time_t now = monotonic_time(NULL); int status; int map; @@ -815,7 +815,7 @@ int handle_packet_missing_indirect(struc /* Check if we recorded a mount fail for this key anywhere */ me = lookup_source_mapent(ap, pkt->name, LKP_DISTINCT); if (me) { - if (me->status >= time(NULL)) { + if (me->status >= monotonic_time(NULL)) { ops->send_fail(ap->logopt, ap->ioctlfd, pkt->wait_queue_token, -ENOENT); cache_unlock(me->mc); --- a/daemon/lookup.c +++ b/daemon/lookup.c @@ -751,7 +751,7 @@ static int lookup_name_file_source_insta struct map_source *instance; char src_file[] = "file"; char src_prog[] = "program"; - time_t age = time(NULL); + time_t age = monotonic_time(NULL); struct stat st; char *type, *format; @@ -788,7 +788,7 @@ static int lookup_name_source_instance(s { struct map_source *instance; const char *format; - time_t age = time(NULL); + time_t age = monotonic_time(NULL); format = map->format; @@ -944,7 +944,7 @@ static void update_negative_cache(struct else map = entry->maps; if (map) { - time_t now = time(NULL); + time_t now = monotonic_time(NULL); int rv = CHE_FAIL; cache_writelock(map->mc); --- a/daemon/state.c +++ b/daemon/state.c @@ -553,7 +553,7 @@ static unsigned int st_readmap(struct au pthread_t thid; struct readmap_args *ra; int status; - int now = time(NULL); + int now = monotonic_time(NULL); debug(ap->logopt, "state %d path %s", ap->state, ap->path); --- a/lib/cache.c +++ b/lib/cache.c @@ -749,7 +749,7 @@ void cache_update_negative(struct mapent struct map_source *ms, const char *key, time_t timeout) { - time_t now = time(NULL); + time_t now = monotonic_time(NULL); struct mapent *me; int rv = CHE_OK; --- a/lib/master.c +++ b/lib/master.c @@ -1426,7 +1426,7 @@ int dump_map(struct master *master, cons struct map_source *source; struct master_mapent *this; struct autofs_point *ap; - time_t now = time(NULL); + time_t now = monotonic_time(NULL); this = list_entry(p, struct master_mapent, list); p = p->next; @@ -1544,7 +1544,7 @@ int master_show_mounts(struct master *ma struct map_source *source; struct master_mapent *this; struct autofs_point *ap; - time_t now = time(NULL); + time_t now = monotonic_time(NULL); unsigned int count = 0; this = list_entry(p, struct master_mapent, list); --- a/modules/dclist.c +++ b/modules/dclist.c @@ -568,7 +568,7 @@ struct dclist *get_dc_list(unsigned int if (!list) goto out_error; - dclist->expire = time(NULL) + min_ttl; + dclist->expire = monotonic_time(NULL) + min_ttl; dclist->uri = list; return dclist; --- a/modules/lookup_file.c +++ b/modules/lookup_file.c @@ -732,7 +732,7 @@ static int lookup_one(struct autofs_poin struct mapent_cache *mc; char mkey[KEY_MAX_LEN + 1]; char mapent[MAPENT_MAX_LEN + 1]; - time_t age = time(NULL); + time_t age = monotonic_time(NULL); FILE *f; unsigned int k_len, m_len; int entry, ret; @@ -831,7 +831,7 @@ static int lookup_wild(struct autofs_poi struct mapent_cache *mc; char mkey[KEY_MAX_LEN + 1]; char mapent[MAPENT_MAX_LEN + 1]; - time_t age = time(NULL); + time_t age = monotonic_time(NULL); FILE *f; unsigned int k_len, m_len; int entry, ret; @@ -974,7 +974,7 @@ int lookup_mount(struct autofs_point *ap /* Check if we recorded a mount fail for this key anywhere */ me = lookup_source_mapent(ap, key, LKP_DISTINCT); if (me) { - if (me->status >= time(NULL)) { + if (me->status >= monotonic_time(NULL)) { cache_unlock(me->mc); return NSS_STATUS_NOTFOUND; } else { --- a/modules/lookup_hesiod.c +++ b/modules/lookup_hesiod.c @@ -121,7 +121,7 @@ int lookup_mount(struct autofs_point *ap /* Check if we recorded a mount fail for this key anywhere */ me = lookup_source_mapent(ap, name, LKP_DISTINCT); if (me) { - if (me->status >= time(NULL)) { + if (me->status >= monotonic_time(NULL)) { cache_unlock(me->mc); return NSS_STATUS_NOTFOUND; } else { @@ -180,7 +180,7 @@ int lookup_mount(struct autofs_point *ap } cache_writelock(mc); - rv = cache_update(mc, source, name, best_record, time(NULL)); + rv = cache_update(mc, source, name, best_record, monotonic_time(NULL)); cache_unlock(mc); if (rv == CHE_FAIL) return NSS_STATUS_UNAVAIL; --- a/modules/lookup_hosts.c +++ b/modules/lookup_hosts.c @@ -283,7 +283,7 @@ int lookup_mount(struct autofs_point *ap struct mapent *me; char *mapent = NULL; int mapent_len; - time_t now = time(NULL); + time_t now = monotonic_time(NULL); int ret; source = ap->entry->current; @@ -295,7 +295,7 @@ int lookup_mount(struct autofs_point *ap /* Check if we recorded a mount fail for this key anywhere */ me = lookup_source_mapent(ap, name, LKP_DISTINCT); if (me) { - if (me->status >= time(NULL)) { + if (me->status >= monotonic_time(NULL)) { cache_unlock(me->mc); return NSS_STATUS_NOTFOUND; } else { --- a/modules/lookup_ldap.c +++ b/modules/lookup_ldap.c @@ -795,7 +795,7 @@ static LDAP *do_reconnect(unsigned logop uris_mutex_lock(ctxt); if (ctxt->dclist) { - if (!ldap || ctxt->dclist->expire < time(NULL)) { + if (!ldap || ctxt->dclist->expire < monotonic_time(NULL)) { free_dclist(ctxt->dclist); ctxt->dclist = NULL; } @@ -2526,7 +2526,7 @@ static int lookup_one(struct autofs_poin struct mapent_cache *mc; int rv, i, l, ql, count; char buf[MAX_ERR_BUF]; - time_t age = time(NULL); + time_t age = monotonic_time(NULL); char *query; LDAPMessage *result = NULL, *e; char *class, *info, *entry; @@ -2881,7 +2881,7 @@ static int check_map_indirect(struct aut { struct mapent_cache *mc; struct mapent *me; - time_t now = time(NULL); + time_t now = monotonic_time(NULL); time_t t_last_read; int ret, cur_state; @@ -2968,7 +2968,7 @@ int lookup_mount(struct autofs_point *ap /* Check if we recorded a mount fail for this key anywhere */ me = lookup_source_mapent(ap, key, LKP_DISTINCT); if (me) { - if (me->status >= time(NULL)) { + if (me->status >= monotonic_time(NULL)) { cache_unlock(me->mc); return NSS_STATUS_NOTFOUND; } else { --- a/modules/lookup_nisplus.c +++ b/modules/lookup_nisplus.c @@ -276,7 +276,7 @@ static int lookup_one(struct autofs_poin nis_result *result; nis_object *this; char *mapent; - time_t age = time(NULL); + time_t age = monotonic_time(NULL); int ret, cur_state; char buf[MAX_ERR_BUF]; @@ -330,7 +330,7 @@ static int lookup_wild(struct autofs_poi nis_result *result; nis_object *this; char *mapent; - time_t age = time(NULL); + time_t age = monotonic_time(NULL); int ret, cur_state; char buf[MAX_ERR_BUF]; @@ -381,7 +381,7 @@ static int check_map_indirect(struct aut { struct mapent_cache *mc; struct mapent *me, *exists; - time_t now = time(NULL); + time_t now = monotonic_time(NULL); time_t t_last_read; int ret = 0; @@ -495,7 +495,7 @@ int lookup_mount(struct autofs_point *ap /* Check if we recorded a mount fail for this key anywhere */ me = lookup_source_mapent(ap, key, LKP_DISTINCT); if (me) { - if (me->status >= time(NULL)) { + if (me->status >= monotonic_time(NULL)) { cache_unlock(me->mc); return NSS_STATUS_NOTFOUND; } else { --- a/modules/lookup_program.c +++ b/modules/lookup_program.c @@ -143,7 +143,7 @@ int lookup_mount(struct autofs_point *ap /* Check if we recorded a mount fail for this key anywhere */ me = lookup_source_mapent(ap, name, LKP_DISTINCT); if (me) { - if (me->status >= time(NULL)) { + if (me->status >= monotonic_time(NULL)) { cache_unlock(me->mc); return NSS_STATUS_NOTFOUND; } else { @@ -192,7 +192,7 @@ int lookup_mount(struct autofs_point *ap * proceed with the program map lookup. */ if (strchr(name, '/') || - me->age + ap->negative_timeout > time(NULL)) { + me->age + ap->negative_timeout > monotonic_time(NULL)) { char *ent = NULL; if (me->mapent) { @@ -441,7 +441,7 @@ next: } cache_writelock(mc); - ret = cache_update(mc, source, name, mapent, time(NULL)); + ret = cache_update(mc, source, name, mapent, monotonic_time(NULL)); cache_unlock(mc); if (ret == CHE_FAIL) { free(mapent); --- a/modules/lookup_sss.c +++ b/modules/lookup_sss.c @@ -374,7 +374,7 @@ static int lookup_one(struct autofs_poin struct mapent_cache *mc; struct mapent *we; void *sss_ctxt = NULL; - time_t age = time(NULL); + time_t age = monotonic_time(NULL); char buf[MAX_ERR_BUF]; char *value = NULL; char *s_key; @@ -491,7 +491,7 @@ static int check_map_indirect(struct aut struct map_source *source; struct mapent_cache *mc; struct mapent *me; - time_t now = time(NULL); + time_t now = monotonic_time(NULL); time_t t_last_read; int ret, cur_state; @@ -585,7 +585,7 @@ int lookup_mount(struct autofs_point *ap /* Check if we recorded a mount fail for this key anywhere */ me = lookup_source_mapent(ap, key, LKP_DISTINCT); if (me) { - if (me->status >= time(NULL)) { + if (me->status >= monotonic_time(NULL)) { cache_unlock(me->mc); return NSS_STATUS_NOTFOUND; } else { --- a/modules/lookup_userhome.c +++ b/modules/lookup_userhome.c @@ -77,7 +77,7 @@ int lookup_mount(struct autofs_point *ap } cache_writelock(mc); - ret = cache_update(mc, source, name, NULL, time(NULL)); + ret = cache_update(mc, source, name, NULL, monotonic_time(NULL)); cache_unlock(mc); if (ret == CHE_FAIL) { --- a/modules/lookup_yp.c +++ b/modules/lookup_yp.c @@ -384,7 +384,7 @@ static int lookup_one(struct autofs_poin char *mapname; char *mapent; int mapent_len; - time_t age = time(NULL); + time_t age = monotonic_time(NULL); int ret; mc = source->mc; @@ -438,7 +438,7 @@ static int lookup_wild(struct autofs_poi char *mapname; char *mapent; int mapent_len; - time_t age = time(NULL); + time_t age = monotonic_time(NULL); int ret; mc = source->mc; @@ -598,7 +598,7 @@ int lookup_mount(struct autofs_point *ap /* Check if we recorded a mount fail for this key anywhere */ me = lookup_source_mapent(ap, key, LKP_DISTINCT); if (me) { - if (me->status >= time(NULL)) { + if (me->status >= monotonic_time(NULL)) { cache_unlock(me->mc); return NSS_STATUS_NOTFOUND; } else { --- a/modules/mount_autofs.c +++ b/modules/mount_autofs.c @@ -218,7 +218,7 @@ int mount_mount(struct autofs_point *ap, source = master_add_map_source(entry, info->type, info->format, - time(NULL), argc, argv); + monotonic_time(NULL), argc, argv); if (!source) { error(ap->logopt, MODPREFIX "failed to add map source to entry"); --- a/modules/replicated.c +++ b/modules/replicated.c @@ -97,14 +97,14 @@ void seed_random(void) fd = open_fd("/dev/urandom", O_RDONLY); if (fd < 0) { - srandom(time(NULL)); + srandom(monotonic_time(NULL)); return; } if (read(fd, &seed, sizeof(seed)) != -1) srandom(seed); else - srandom(time(NULL)); + srandom(monotonic_time(NULL)); close(fd);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor